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 List<News> newsList; //新闻内容列表
private static List<Channel> channelList;
private ShowJdialog showJdialogMessage = new ShowJdialog(); //提示窗口
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() //窗口居中显示
{
this.setLocation((screenSize.width - WIDTH)/2,(screenSize.height - HEIGHT)/2);
}
{
channelList = rssService.getChannelList();
/**
* 添加新闻列表
*/
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]);
{
{
readactionlistener.actionPerformed(e);
}
});
}
{
{
ExportActionListener export = new ExportActionListener();
export.actionPerformed(e);
}
});
{
{
}
});
menuBar.add(menu);
menuBar.add(help);
menu.add(view);
menu.add(item_dao);
menu.add(item_ESC);
return menuBar;
}
{
/**
* 新闻内容读取功能
*
*/
{
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);
}
{
/**
* 导出按钮的动作事件
*/
{
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
() //窗口面板
{
return jpMain;
}
{
jsLeft.setDividerLocation(180);
jsLeft.setLeftComponent(getJTree());
jsLeft.setRightComponent(getJSPClientArea());
return jsLeft;
}
{
for(int i = 0; i < channelList.size(); i++)
{
Channel channel = channelList.get(i);
name[i] = channel.getName();
}
root.add(t1);
root.add(t2);
t1.add(t1_1);
t1.add(t1_2);
t2.add(t2_1);
t2.add(t2_2);
{
{
if(selectedNode == null)
return ;
if(selectedNode.isLeaf())
{
showNews(selectedNode.toString());
}
}
});
return jtTreePanel;
}
{
jtTool.add(getJBExport());
jtTool.add(getJBUpdate());
jtTool.add(getJBExit());
return jtTool;
}
{
jspVertical.setDividerLocation(240);
jspVertical.setLeftComponent(getJSPTable());
jspVertical.setRightComponent(getJSPContent());
return jspVertical;
}
private JPanel getJSBMy
() //状态栏
{
status.add(jlStatus);
return status;
}
{
if(jtaContent == null)
{
jtaContent.setLineWrap(true); //文本区的换行策略
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);
String currentDate
= dateFormat.
format(date
);
String[] data
= {news.
getTitle(),currentDate,news.
getPubDate(),news.
getAuthor()};
dtmTableModel.addRow(data);
}
}
{
if(jtTable == null)
{
dtmTableModel.addColumn("主题");
dtmTableModel.addColumn("接收时间");
dtmTableModel.addColumn("发布时间");
dtmTableModel.addColumn("作者");
jtTable
= new JTable(dtmTableModel
);
{
/**
* 重写mouseClicked() 方法处理鼠标点击事件
*/
{
{
int selectedRow = jtTable.getSelectedRow();
News selectedNews = newsList.get(selectedRow);
jtaContent.setText(rssService.newsToString(selectedNews));
}
}
});
}
return jspTable;
}
private JButton getJBExport
() //导出按钮
{
if(jbExport == null)
{
jbExport.setToolTipText("导出");
{
{
ExportActionListener export = new ExportActionListener();
export.actionPerformed(e);
}
});
}
return jbExport;
}
private JButton getJBUpdate
() //更新按钮
{
if(jbUpdate == null)
{
jbUpdate.setToolTipText("更新新闻内容");
{
{
UpdateThread up = new UpdateThread();
up.start();
}
});
}
return jbUpdate;
}
{
if(jbExit == null)
{
jbExit.setToolTipText("退出RSS阅读器");
{
{
}
});
}
return jbExit;
}
}