package com.ruanko.view; |
import java.awt.BorderLayout; |
import java.awt.Component; |
import java.awt.Container; |
import java.awt.Dimension; |
import java.awt.FlowLayout; |
import java.awt.GridBagConstraints; |
import java.awt.GridLayout; |
import java.awt.Toolkit; |
import java.awt.event.ActionEvent; |
import java.awt.event.ActionListener; |
import java.awt.event.KeyEvent; |
import java.awt.event.MouseAdapter; |
import java.awt.event.MouseEvent; |
import java.awt.event.MouseListener; |
import java.io.BufferedWriter; |
import java.io.File; |
import java.io.FileWriter; |
import java.io.IOException; |
import java.text.SimpleDateFormat; |
import java.util.Date; |
import java.util.List; |
import javax.swing.ImageIcon; |
import javax.swing.JDialog; |
import javax.swing.JFrame; |
import javax.swing.JLabel; |
import javax.swing.JOptionPane; |
import javax.swing.JPanel; |
import javax.swing.JComboBox; |
import javax.swing.JButton; |
import javax.swing.JScrollPane; |
import javax.swing.JSplitPane; |
import javax.swing.JTable; |
import javax.swing.JTextArea; |
import javax.swing.JTree; |
import javax.swing.KeyStroke; |
import javax.swing.event.AncestorEvent; |
import javax.swing.event.AncestorListener; |
import javax.swing.event.TreeSelectionEvent; |
import javax.swing.event.TreeSelectionListener; |
import javax.swing.table.DefaultTableModel; |
import javax.swing.tree.DefaultMutableTreeNode; |
import com.ruanko.model.Channel; |
import com.ruanko.model.News; |
import com.ruanko.service.RSSService; |
import com.ruanko.service.UpdateThread; |
import com.runko.dao.NewsDao; |
import javax.swing.JMenuBar; |
import javax.swing.JMenu; |
import javax.swing.JMenuItem; |
import javax.swing.JToolBar; |
import java.awt.Color; |
@SuppressWarnings ({ "serial" , "unused" }) |
public class JMainFrame extends JFrame |
{ |
/** |
* Description: 主界面窗体 |
* @param WIDTH 静态全局变量,设置窗体的宽度 |
* @param HEIGHT 全局静态变量,设置窗体的高度 |
* @param TITLE 全局静态变量,设置窗体标题 |
*/ |
RSSService rssService = null ; |
private NewsDao rssDao; |
|
private final static int WIDTH = 800 ; |
private final static int HEIGHT = 650 ; |
private final static String TITLE = "RSS阅读器" ; |
|
private JButton jbExport; //导出按钮 |
private JButton jbUpdate; //更新按钮 |
private JButton jbExit; //退出按钮 |
private JTextArea jtaContent; //新闻内容文本区 |
private DefaultTableModel dtmTableModel; //表格数据模型 |
private JTable jtTable; //表格 |
private List<News> newsList; //新闻内容列表 |
private static List<Channel> channelList; |
|
private ShowJdialog showJdialogMessage = new ShowJdialog(); //提示窗口 |
private JLabel label; |
|
private ReadActionListener readactionlistener; |
|
private int select = 0 ; //保存选中的新闻选项 |
|
public JMainFrame() |
{ |
rssService = new RSSService(); |
|
this .setTitle(TITLE); |
this .setSize(WIDTH,HEIGHT); |
this .setCenter(); |
this .setJMenuBar(getJMBMy()); |
this .setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); |
this .setContentPane(getJPMain()); |
|
readactionlistener = new ReadActionListener(); |
} |
|
private void setCenter() //窗口居中显示 |
{ |
Toolkit kit = Toolkit.getDefaultToolkit(); |
Dimension screenSize = kit.getScreenSize(); |
this .setLocation((screenSize.width - WIDTH)/ 2 ,(screenSize.height - HEIGHT)/ 2 ); |
} |
|
private JMenuBar getJMBMy() //菜单栏 |
{ |
channelList = rssService.getChannelList(); |
|
JMenuBar menuBar = new JMenuBar(); |
|
JMenu menu = new JMenu( "文件(F)" ); |
menu.setMnemonic(KeyEvent.VK_F); |
|
JMenu help = new JMenu( "帮助(H)" ); |
help.setMnemonic(KeyEvent.VK_H); |
|
JMenu view = new JMenu( "新闻列表(O)" ); |
view.setMnemonic(KeyEvent.VK_O); |
|
/** |
* 添加新闻列表 |
*/ |
|
JMenuItem[] view_item = new JMenuItem[channelList.size()]; |
|
for ( int i = 0 ; i < channelList.size(); i++) |
{ |
Channel channel = channelList.get(i); |
view_item[i] = new JMenuItem(channel.getName()); |
view.add(view_item[i]); |
view_item[i].addActionListener( new ActionListener() |
{ |
public void actionPerformed(ActionEvent e) |
{ |
readactionlistener.actionPerformed(e); |
} |
}); |
} |
|
JMenuItem item_dao = new JMenuItem( "导出(D)" ,KeyEvent.VK_D); |
item_dao.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_D,ActionEvent.CTRL_MASK)); |
item_dao.addActionListener( new ActionListener() |
{ |
public void actionPerformed(ActionEvent e) |
{ |
ExportActionListener export = new ExportActionListener(); |
export.actionPerformed(e); |
} |
}); |
|
JMenuItem item_ESC = new JMenuItem( "退出(X)" ,KeyEvent.VK_X); |
item_ESC.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X,ActionEvent.CTRL_MASK)); |
item_ESC.addActionListener( new ActionListener() |
{ |
public void actionPerformed(ActionEvent e) |
{ |
System.exit( 0 ); |
} |
}); |
|
menuBar.add(menu); |
menuBar.add(help); |
|
menu.add(view); |
menu.add(item_dao); |
menu.add(item_ESC); |
|
return menuBar; |
} |
|
class ReadActionListener implements ActionListener |
{ |
/** |
* 新闻内容读取功能 |
* |
*/ |
public void actionPerformed(ActionEvent e) |
{ |
showNews(e.getActionCommand()); |
} |
} |
|
private void showNews(String name) |
{ |
/** |
* 把新闻显示功能独立成一个方法 |
*/ |
|
Channel selectedChannel = new Channel(); |
for ( int i = 0 ; i < channelList.size(); i++) |
{ |
selectedChannel = channelList.get(i); |
if (selectedChannel.getName() == name) |
{ |
select = i; |
break ; |
} |
} |
String filePath = selectedChannel.getFilePath(); |
newsList = rssService.getNewsList(filePath); |
jtaContent.setText( "" ); |
showTable(newsList); |
} |
|
class ExportActionListener implements ActionListener |
{ |
/** |
* 导出按钮的动作事件 |
*/ |
public void actionPerformed(ActionEvent e) |
{ |
if (newsList == null ) |
{ |
Channel channel = channelList.get(select); |
String filePath = channel.getFilePath(); |
newsList = rssService.getNewsList(filePath); |
} |
if (rssService.save()) |
showJdialogMessage.showJdialog( "新闻信息保存成功!" ); |
else |
showJdialogMessage.showJdialog( "新闻信息保存失败!" ); |
} |
} |
|
private JPanel getJPMain() //窗口面板 |
{ |
JPanel jpMain = new JPanel(); //主面板 |
jpMain.setLayout( new BorderLayout()); |
jpMain.add(getJTBMy(), BorderLayout.NORTH); |
|
jpMain.add(getJSPLeft() ,BorderLayout.CENTER); |
jpMain.add(getJSBMy(),BorderLayout.SOUTH); |
return jpMain; |
} |
|
private JSplitPane getJSPLeft() //左右面板分割 |
{ |
JSplitPane jsLeft = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT); |
|
jsLeft.setDividerLocation( 180 ); |
|
jsLeft.setLeftComponent(getJTree()); |
|
jsLeft.setRightComponent(getJSPClientArea()); |
|
return jsLeft; |
} |
|
private JScrollPane getJTree() //获取树形控件 |
{ |
String[] name = new String[ 10 ]; |
for ( int i = 0 ; i < channelList.size(); i++) |
{ |
Channel channel = channelList.get(i); |
name[i] = channel.getName(); |
} |
|
DefaultMutableTreeNode root = new DefaultMutableTreeNode( "新闻列表" ); |
DefaultMutableTreeNode t1 = new DefaultMutableTreeNode( "腾讯新闻" ); |
DefaultMutableTreeNode t2 = new DefaultMutableTreeNode( "新浪新闻" ); |
|
DefaultMutableTreeNode t1_1 = new DefaultMutableTreeNode(name[ 0 ]); |
DefaultMutableTreeNode t1_2 = new DefaultMutableTreeNode(name[ 1 ]); |
DefaultMutableTreeNode t2_1 = new DefaultMutableTreeNode(name[ 2 ]); |
DefaultMutableTreeNode t2_2 = new DefaultMutableTreeNode(name[ 3 ]); |
|
root.add(t1); |
root.add(t2); |
|
t1.add(t1_1); |
t1.add(t1_2); |
t2.add(t2_1); |
t2.add(t2_2); |
|
final JTree jtree = new JTree(root); |
|
jtree.addTreeSelectionListener( new TreeSelectionListener() |
{ |
public void valueChanged(TreeSelectionEvent e) |
{ |
DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode)jtree.getLastSelectedPathComponent(); |
if (selectedNode == null ) |
return ; |
if (selectedNode.isLeaf()) |
{ |
showNews(selectedNode.toString()); |
} |
} |
}); |
|
JScrollPane jtTreePanel = new JScrollPane(jtree); // 将树放在滚动面板中 |
return jtTreePanel; |
} |
|
public JToolBar getJTBMy() //工具栏 |
{ |
JToolBar jtTool = new JToolBar(); |
jtTool.setLayout( new FlowLayout(FlowLayout.LEFT)); |
jtTool.add(getJBExport()); |
jtTool.add(getJBUpdate()); |
jtTool.add(getJBExit()); |
return jtTool; |
} |
|
private JSplitPane getJSPClientArea() //分割面板 |
{ |
JSplitPane jspVertical = new JSplitPane(JSplitPane.VERTICAL_SPLIT); |
|
jspVertical.setDividerLocation( 240 ); |
|
jspVertical.setLeftComponent(getJSPTable()); |
|
jspVertical.setRightComponent(getJSPContent()); |
|
return jspVertical; |
} |
|
private JPanel getJSBMy() //状态栏 |
{ |
JPanel status = new JPanel(); |
status.setLayout( new FlowLayout(FlowLayout.LEFT)); |
|
JLabel jlStatus = new JLabel( "www.ruanko.com" ); |
status.add(jlStatus); |
|
return status; |
} |
|
private JScrollPane getJSPContent() //新闻文本区 |
{ |
JScrollPane jspContent = null ; |
if (jtaContent == null ) |
{ |
jtaContent = new JTextArea(); |
jtaContent.setLineWrap( true ); //文本区的换行策略 |
jspContent = new JScrollPane(jtaContent); |
jspContent.setPreferredSize( new Dimension( 780 , 260 )); |
} |
return jspContent; |
} |
|
private void showTable(List<News> newsList) //新闻内容以表格显示 |
{ |
//清空表格的内容 |
int rowCount = dtmTableModel.getRowCount(); |
while (rowCount > 0 ) |
{ |
dtmTableModel.removeRow( 0 ); |
rowCount--; |
} |
|
//遍历新闻内容列表,将相应的新闻内容显示到表格中 |
for ( int i = 0 ; i < newsList.size(); i++ ) |
{ |
News news = newsList.get(i); |
|
SimpleDateFormat dateFormat = new SimpleDateFormat( "yyyy-MM-dd- HH:mm:ss" ); |
Date date = new Date(); |
String currentDate = dateFormat.format(date); |
|
String[] data = {news.getTitle(),currentDate,news.getPubDate(),news.getAuthor()}; |
dtmTableModel.addRow(data); |
} |
} |
|
private JScrollPane getJSPTable() //表格内容单击事件处理 |
{ |
JScrollPane jspTable = null ; |
if (jtTable == null ) |
{ |
dtmTableModel = new DefaultTableModel(); |
dtmTableModel.addColumn( "主题" ); |
dtmTableModel.addColumn( "接收时间" ); |
dtmTableModel.addColumn( "发布时间" ); |
dtmTableModel.addColumn( "作者" ); |
|
jtTable = new JTable(dtmTableModel); |
|
jtTable.addMouseListener( new MouseAdapter() |
{ |
/** |
* 重写mouseClicked() 方法处理鼠标点击事件 |
*/ |
public void mouseClicked(MouseEvent e) |
{ |
if (e.getButton() == MouseEvent.BUTTON1) |
{ |
int selectedRow = jtTable.getSelectedRow(); |
News selectedNews = newsList.get(selectedRow); |
jtaContent.setText(rssService.newsToString(selectedNews)); |
} |
} |
}); |
jspTable = new JScrollPane(jtTable); |
} |
return jspTable; |
} |
|
private JButton getJBExport() //导出按钮 |
{ |
if (jbExport == null ) |
{ |
ImageIcon icon = new ImageIcon( "images/export.png" ); |
jbExport = new JButton(icon); |
jbExport.setToolTipText( "导出" ); |
jbExport.addActionListener( new ActionListener() |
{ |
public void actionPerformed(ActionEvent e) |
{ |
ExportActionListener export = new ExportActionListener(); |
export.actionPerformed(e); |
} |
}); |
} |
return jbExport; |
} |
|
|
private JButton getJBUpdate() //更新按钮 |
{ |
if (jbUpdate == null ) |
{ |
ImageIcon icon = new ImageIcon( "images/update.png" ); |
jbUpdate = new JButton(icon); |
jbUpdate.setToolTipText( "更新新闻内容" ); |
jbUpdate.addActionListener( new ActionListener() |
{ |
public void actionPerformed(ActionEvent e) |
{ |
UpdateThread up = new UpdateThread(); |
up.start(); |
} |
}); |
} |
return jbUpdate; |
} |
|
private JButton getJBExit() //退出按钮 |
{ |
if (jbExit == null ) |
{ |
ImageIcon icon = new ImageIcon( "images/exit.png" ); |
jbExit = new JButton(icon); |
jbExit.setToolTipText( "退出RSS阅读器" ); |
jbExit.addActionListener( new ActionListener() |
{ |
public void actionPerformed(ActionEvent e) |
{ |
System.exit( 0 ); |
} |
}); |
} |
return jbExit; |
} |
} |
初级程序员
by: 姽婳 发表于:2016-09-05 09:26:19 顶(0) | 踩(0) 回复
怎么没有源码呀!
回复评论