package rssreader.view;
import rssreader.model.NewsFeed;
import rssreader.model.URL;
import rssreader.service.*;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.Image;
import java.awt.Label;
import java.awt.Menu;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.net.URISyntaxException;
import java.net.URLDecoder;
import java.nio.Buffer;
import java.util.HashMap;
import java.util.Map;
import org.jdom.*;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSeparator;
import javax.swing.JSplitPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.JTextPane;
import javax.swing.JToolBar;
import javax.swing.ListSelectionModel;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.filechooser.FileNameExtensionFilter;
import javax.swing.table.DefaultTableModel;
import org.jdom.JDOMException;
public class FrameMain
extends JFrame{
/**业务逻辑对象*/
private Service service;
/**菜单面板中的控件*/
private JButton moreButton
;//打开网页按钮
private String uriaddress
;//网页地址
private JLabel statusLabel
;//状态栏
/**文件选择的文件项*/
/**新闻标题面板的控件*/
private JTable newsTitleTable
;//新闻标题表格
private JTextPane textPaneNewsDescripation
;//新闻内容文本框
//主面板构造器
public FrameMain() {
// TODO Auto-generated constructor stub
//创建业务逻辑对象
service=new Service(this);
setTitle("RSS阅读器");
//设置窗体大小
setBounds(1000, 300, 1500, 1700);
//添加主面板
JPanel contentePanel
=getContentPanel
();
setContentPane(contentePanel);
//添加菜单
setJMenuBar(getJMenuBar());
}
//主面板
private JPanel getContentPanel
(){
//面板上添加工具栏
return panel;
}
//面板组件
splitPane.setDividerLocation(650);//设置分割条位置
//添加功能
//新闻列表
//新闻内容
splitPane.setLeftComponent(panel);
splitPane.setRightComponent(getTextSolPanel());
return splitPane;
}
//创建菜单
//创建菜单条
//创建文件菜单
fileMenu.setMnemonic('F');//快捷键
fileMenu.setFont(bigfont);
//把菜单添加到菜单栏
menuBar.add(fileMenu);
//创建文件菜单项
@Override
// TODO Auto-generated method stub
statusLabel.setText("读取文件");
jfFrame.setVisible(true);
jfFrame.setBounds(1400, 500, 600, 400);
jfFrame.setLayout(null);
jfFrame.add(getComboBox()).setBounds(150, 50, 300, 100);
read.setFont(bigfont);
jfFrame.add(read).setBounds(50, 200, 200, 100);
read.addActionListener(readListener);
@Override
// TODO Auto-generated method stub
jfFrame.dispose();
}
});
exit.setFont(bigfont);
jfFrame.add(exit).setBounds(300, 200, 200, 100);
@Override
// TODO Auto-generated method stub
jfFrame.dispose();
}
});
}
});
open.setFont(bigfont);
save.setFont(bigfont);
save.addActionListener(saveListener);
@Override
// TODO Auto-generated method stub
statusLabel.setText("退出");
}
});
exit.setFont(bigfont);
//添加菜单项到菜单
fileMenu.add(open);
fileMenu.add(save);
fileMenu.add(exit);
//创建查询菜单
queryMenu.setFont(bigfont);
queryMenu.setMnemonic('Q');//快捷键
menuBar.add(queryMenu);
//创建查询菜单项
queryTitle.setFont(bigfont);
queryAutor.setFont(bigfont);
queryAutor.setEnabled(false);
queryMenu.add(queryAutor);
queryMenu.add(queryTitle);
//帮助菜单
helpMenu.setFont(bigfont);
helpMenu.setMnemonic('h');
aboutAutor.setFont(bigfont);
@Override
// TODO Auto-generated method stub
jFrame.setVisible(true);
jFrame.setSize(800, 400);
jFrame.setLocationRelativeTo(null);
JLabel jLabel
=new JLabel("<html><body>作者:北京交通大学 段学宇<br>日期:2017年10月29日</body></html>");
jLabel.setFont(bigfont);
jFrame.add(jLabel).setSize(600,200);
}
});
helpMenu.add(aboutAutor);
menuBar.add(helpMenu);
return menuBar;
}
//创建工具栏
//添加工具栏组件
toolBar.add(getSaveButton());//保存按钮
toolBar.add(getQueryButton());//查询按钮
toolBar.add(getmoreButton());//访问按钮
toolBar.setFloatable(false);
return toolBar;
}
//创建菜单面板
private JPanel getQueryPanel
(){
menuPanel.
add(new Label("查询标题")).
setFont(bigfont
);
menuPanel.add(getNewstitleText());
return menuPanel;
}
//创建表格面板
tableSolPanel.setViewportView(getNewsTitleTable());
tableSolPanel.
setPreferredSize(new Dimension(1300,
650));
return tableSolPanel;
}
//创建文本框面板
messageSolePanel.setViewportView(getTextPaneNewsDescription());
messageSolePanel.
setPreferredSize(new Dimension(1300,
650));
return messageSolePanel;
}
/**控件初始化*/
if(comboBox==null){
comboBox.setFont(bigfont);
comboBox.
addItem(new URL("腾讯-国际新闻",
"rss_newswj.xml"));
comboBox.
addItem(new URL("腾讯-国内新闻",
"rss_newsgn.xml"));
comboBox.
addItem(new URL("新浪-体育新闻",
"sports.xml"));
comboBox.
addItem(new URL("新浪-社会新闻",
"focus15.xml"));
}
return comboBox;
}
//读取按钮
if(readButton==null){
readButton.setFont(bigfont);
readButton.setToolTipText("读取文件");//按钮提示信息
readButton.addActionListener(readListener);
}
return readButton;
}
//保存按钮
if(saveButton ==null){
//ImageIcon icon=new ImageIcon("timg.jpg");
saveButton.setToolTipText("保存文件");//按钮提示信息
saveButton.addActionListener(saveListener);
}
return saveButton ;
}
//访问按钮
if(moreButton ==null){
moreButton.setToolTipText("访问该新闻所在页面");//按钮提示信息
@Override
// TODO Auto-generated method stub
java.net.URI uri;
try {
statusLabel.setText("访问外部新闻");
uri = new java.net.URI(uriaddress);
java.awt.Desktop.getDesktop().browse(uri);
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
});
}
return moreButton ;
}
//查询按钮
if(queryButton ==null){
@Override
// TODO Auto-generated method stub
statusLabel.setText("查询文件");
}
});
}
return queryButton;
}
//详细新闻显示框体
if(newstitleText==null){
newstitleText.setColumns(22);
newstitleText.setFont(bigfont);
}
return newstitleText;
}
//新闻标题栏
public JTable getNewsTitleTable
(){
if(newsTitleTable==null){
//创建新闻标题表格
//创建表格中的数据模型对象
myTableModel defaultModel
=new myTableModel
(new Object [50][9],
new String [] {"主题",
"接受时间",
"发布时间",
"作者"});
newsTitleTable.setModel(defaultModel);
newsTitleTable.getTableHeader().setFont(bigfont);
newsTitleTable.setFont(font);
newsTitleTable.setRowHeight(50);
//设置表格的行高
newsTitleTable.setEnabled(true);
newsTitleTable.
getSelectionModel().
setSelectionMode(ListSelectionModel.
SINGLE_SELECTION);//设置居中
/**
* 标题表格监听器,创建新行事件
* */
@Override
// TODO Auto-generated method stub
//获得选中行的值
int row=newsTitleTable.getSelectedRow();
try {
service.showMessage(row);
uriaddress=service.geturiaddress(); //获得网址
statusLabel.setText(service.getTitle());//状态栏
// TODO: handle exception
//获得处理BadLocation异常信息
showError("文档转换操作异常:"+ex.getMessage());
}
}
} );
}
return newsTitleTable;
}
protected void showError
(String string
) {
// TODO Auto-generated method stub
}
public JTextPane getTextPaneNewsDescription
(){
if(textPaneNewsDescripation==null){
//创建文本域
//不可编辑
textPaneNewsDescripation.setEditable(false);
textPaneNewsDescripation.setFont(bigfont);
}
return textPaneNewsDescripation;
}
private JPanel getStatusBar
(){
panel.
add(new Label(" "));
statusLabel
=new JLabel("北京交通大学软件学院");
statusLabel.setFont(bigfont);
panel.add(statusLabel);
return panel;
}
// TODO Auto-generated method stub
/**目标文件*/
/**显示错误信息*/
//网址字符串
//获得下拉框选中项
Object o
=comboBox.
getSelectedItem();
//获得工程目录
//获得下拉框选中项的文件名,赋值给网址字符串
address
=((URL)o
).
getAddress();
//获得解析文件完整路径
inFile=dir+"\\NewfeedFiles\\"+address;
try{
//转编路径为UTF-8
service.fileDo(inFile);
//获得处理IO异常信息
errorInfo="系统找不到指定文件";
}catch(JDOMException jde){
errorInfo="解析文件异常";
jde.printStackTrace();
}finally{
showError(errorInfo);
}
}
};
@Override
// TODO Auto-generated method stub
statusLabel.setText("保存文件");
chooser.setFileFilter(new FileNameExtensionFilter("文本文件(.txt)", "txt"));
int returnVal = chooser.showOpenDialog(parent);
path=chooser.getSelectedFile().getPath();
}
String filename
=chooser.
getSelectedFile().
toString();
try {
text=service.getPassage();
if(text!=null){
out.write(service.getPassage());
System.
out.
println("保存成功,路径为"+filename
+".txt");
out.close();
jFrame.setVisible(true);
jFrame.setSize(600, 400);
jFrame.setLocationRelativeTo(null);
jLabel.setFont(bigfont);
jFrame.add(jLabel).setSize(400,200);
}
else{
jFrame.setVisible(true);
jFrame.setSize(800, 400);
jFrame.setLocationRelativeTo(null);
jLabel.setFont(bigfont);
jFrame.add(jLabel).setSize(600,200);
}
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
};
}