[Java] RSS阅读器 →→→→→进入此内容的聊天室

来自 , 2020-10-05, 写在 Java, 查看 127 次.
URL http://www.code666.cn/view/9597353e
  1. package rssreader.view;
  2. import rssreader.model.NewsFeed;
  3. import rssreader.model.URL;
  4. import rssreader.service.*;
  5.  
  6. import java.awt.BorderLayout;
  7. import java.awt.Dimension;
  8. import java.awt.FlowLayout;
  9. import java.awt.Font;
  10. import java.awt.Image;
  11. import java.awt.Label;
  12. import java.awt.Menu;
  13. import java.awt.event.ActionEvent;
  14. import java.awt.event.ActionListener;
  15. import java.awt.image.BufferedImage;
  16. import java.io.File;
  17. import java.io.FileInputStream;
  18. import java.io.FileNotFoundException;
  19. import java.io.FileWriter;
  20. import java.io.IOException;
  21. import java.net.URISyntaxException;
  22. import java.net.URLDecoder;
  23. import java.nio.Buffer;
  24. import java.util.HashMap;
  25. import java.util.Map;
  26.  
  27. import org.jdom.*;
  28.  
  29. import javax.imageio.ImageIO;
  30. import javax.swing.ImageIcon;
  31. import javax.swing.JButton;
  32. import javax.swing.JComboBox;
  33. import javax.swing.JFileChooser;
  34. import javax.swing.JFrame;
  35. import javax.swing.JLabel;
  36. import javax.swing.JMenu;
  37. import javax.swing.JMenuBar;
  38. import javax.swing.JMenuItem;
  39. import javax.swing.JPanel;
  40. import javax.swing.JScrollPane;
  41. import javax.swing.JSeparator;
  42. import javax.swing.JSplitPane;
  43. import javax.swing.JTable;
  44. import javax.swing.JTextField;
  45. import javax.swing.JTextPane;
  46. import javax.swing.JToolBar;
  47. import javax.swing.ListSelectionModel;
  48. import javax.swing.event.ListSelectionEvent;
  49. import javax.swing.event.ListSelectionListener;
  50. import javax.swing.filechooser.FileNameExtensionFilter;
  51. import javax.swing.table.DefaultTableModel;
  52.  
  53. import org.jdom.JDOMException;
  54.  
  55. public class FrameMain extends JFrame{
  56.         public static Font font = new Font("宋体", Font.BOLD, 25);
  57.         public static Font bigfont = new Font("宋体", Font.BOLD, 40);
  58.         /**业务逻辑对象*/
  59.         private Service service;
  60.         /**菜单面板中的控件*/
  61.         private JComboBox comboBox;//下拉框
  62.         private JButton readButton;//读取按钮
  63.         private JButton saveButton;//保存按钮
  64.         private JButton moreButton;//打开网页按钮
  65.         private JTextField newstitleText;//查询新闻标题输入框
  66.         private JButton queryButton;//查询按钮
  67.         private String uriaddress;//网页地址
  68.         private JLabel statusLabel;//状态栏
  69.         /**文件选择的文件项*/
  70.        
  71.         /**新闻标题面板的控件*/
  72.         private JTable newsTitleTable;//新闻标题表格
  73.         private JTextPane textPaneNewsDescripation;//新闻内容文本框
  74.        
  75.        
  76.         //主面板构造器
  77.         public FrameMain() {
  78.                 // TODO Auto-generated constructor stub
  79.                 //创建业务逻辑对象
  80.                 service=new Service(this);
  81.                 setTitle("RSS阅读器");
  82.                 //设置窗体大小
  83.                 setBounds(1000, 300, 1500, 1700);
  84.                 //添加主面板
  85.                 JPanel contentePanel=getContentPanel();
  86.                 setContentPane(contentePanel);
  87.                 //添加菜单
  88.                 setJMenuBar(getJMenuBar());
  89.        
  90.                
  91.                
  92.         }
  93.         //主面板
  94.         private  JPanel getContentPanel(){
  95.                 JPanel panel=new JPanel(new BorderLayout());
  96.        
  97.                 //面板上添加工具栏
  98.                 panel.add(getJToolBar(),BorderLayout.NORTH);
  99.        
  100.                 panel.add(getCenterPanel(),BorderLayout.CENTER);
  101.                
  102.                
  103.                 panel.add(getStatusBar(),BorderLayout.SOUTH);
  104.        
  105.                 return panel;
  106.                
  107.         }
  108.        
  109.         //面板组件
  110.         private JSplitPane getCenterPanel(){
  111.                 JSplitPane splitPane=new JSplitPane(JSplitPane.VERTICAL_SPLIT);
  112.                 splitPane.setDividerLocation(650);//设置分割条位置
  113.                
  114.                 JPanel panel=new JPanel(new BorderLayout());
  115.                 //添加功能
  116.                 panel.add(getQueryPanel(),BorderLayout.NORTH);
  117.                 //新闻列表
  118.                 panel.add(getTabelSollPanel(),BorderLayout.CENTER);
  119.                
  120.                 //新闻内容
  121.                
  122.                 splitPane.setLeftComponent(panel);
  123.                 splitPane.setRightComponent(getTextSolPanel());
  124.                 return splitPane;
  125.         }
  126.        
  127.        
  128.        
  129.        
  130.         //创建菜单
  131.         public JMenuBar getJMenuBar(){
  132.                 //创建菜单条
  133.                 JMenuBar menuBar=new JMenuBar();
  134.                
  135.                 //创建文件菜单
  136.                 JMenu fileMenu=new JMenu("文件");
  137.                 fileMenu.setMnemonic('F');//快捷键
  138.                 fileMenu.setFont(bigfont);
  139.                 //把菜单添加到菜单栏
  140.                 menuBar.add(fileMenu);
  141.                 //创建文件菜单项
  142.        
  143.                 JMenuItem open=new JMenuItem("打开..");
  144.                 open.addActionListener(new ActionListener() {
  145.                        
  146.                         @Override
  147.                         public void actionPerformed(ActionEvent arg0) {
  148.                                 // TODO Auto-generated method stub
  149.                                 statusLabel.setText("读取文件");
  150.                                 JFrame jfFrame=new JFrame("选择一个RSS文件");
  151.                                 jfFrame.setVisible(true);
  152.                                 jfFrame.setBounds(1400, 500, 600, 400);
  153.                                 jfFrame.setLayout(null);
  154.                                 jfFrame.add(getComboBox()).setBounds(150, 50, 300, 100);
  155.                                 JButton read=new JButton("确定");
  156.                                 read.setFont(bigfont);
  157.                                 jfFrame.add(read).setBounds(50, 200, 200, 100);
  158.                                 read.addActionListener(readListener);
  159.                                 read.addActionListener(new ActionListener() {
  160.                                        
  161.                                         @Override
  162.                                         public void actionPerformed(ActionEvent e) {
  163.                                                 // TODO Auto-generated method stub
  164.                                                 jfFrame.dispose();
  165.                                         }
  166.                                 });
  167.                                 JButton exit=new JButton("取消");
  168.                                 exit.setFont(bigfont);
  169.                                 jfFrame.add(exit).setBounds(300, 200, 200, 100);
  170.                                 exit.addActionListener(new ActionListener() {
  171.                                        
  172.                                         @Override
  173.                                         public void actionPerformed(ActionEvent e) {
  174.                                                 // TODO Auto-generated method stub
  175.                                                 jfFrame.dispose();
  176.                                         }
  177.                                 });
  178.                         }
  179.                 });
  180.                 open.setFont(bigfont);
  181.                 JMenuItem save=new JMenuItem("保存");
  182.                 save.setFont(bigfont);
  183.                 save.addActionListener(saveListener);
  184.                 JMenuItem exit=new JMenuItem("退出");
  185.                 exit.addActionListener(new ActionListener() {
  186.                        
  187.                         @Override
  188.                         public void actionPerformed(ActionEvent e) {
  189.                                 // TODO Auto-generated method stub
  190.                                 System.exit(0);
  191.                                 statusLabel.setText("退出");
  192.                         }
  193.                 });
  194.                 exit.setFont(bigfont);
  195.                 //添加菜单项到菜单
  196.                 fileMenu.add(open);
  197.                 fileMenu.add(new JSeparator());//设置分割线
  198.                 fileMenu.add(save);
  199.                 fileMenu.add(new JSeparator());//设置分割线
  200.                 fileMenu.add(exit);
  201.                
  202.                 //创建查询菜单
  203.                 JMenu queryMenu=new JMenu("查询");
  204.                 queryMenu.setFont(bigfont);
  205.                 queryMenu.setMnemonic('Q');//快捷键
  206.                 menuBar.add(queryMenu);
  207.                 //创建查询菜单项
  208.                 JMenuItem queryTitle=new JMenuItem("通过标题查找");
  209.                 queryTitle.setFont(bigfont);
  210.                 JMenuItem queryAutor=new JMenuItem("通过作者查找");
  211.                 queryAutor.setFont(bigfont);
  212.                 queryAutor.setEnabled(false);
  213.                 queryMenu.add(queryAutor);
  214.                 queryMenu.add(queryTitle);
  215.                 //帮助菜单
  216.                 JMenu helpMenu=new JMenu("帮助");
  217.                 helpMenu.setFont(bigfont);
  218.                 helpMenu.setMnemonic('h');
  219.                 JMenuItem aboutAutor=new JMenuItem("关于作者");
  220.                 aboutAutor.setFont(bigfont);
  221.                 aboutAutor.addActionListener(new ActionListener() {
  222.                        
  223.                         @Override
  224.                         public void actionPerformed(ActionEvent arg0) {
  225.                                 // TODO Auto-generated method stub
  226.                                  JFrame jFrame=new JFrame("关于作者");
  227.                                  jFrame.setVisible(true);
  228.                                  jFrame.setSize(800, 400);
  229.                                  jFrame.setLocationRelativeTo(null);
  230.                                  JLabel jLabel=new JLabel("<html><body>作者:北京交通大学 段学宇<br>日期:2017年10月29日</body></html>");
  231.                                  jLabel.setFont(bigfont);
  232.                                  jFrame.add(jLabel).setSize(600,200);
  233.                         }
  234.                 });
  235.                 helpMenu.add(aboutAutor);
  236.                 menuBar.add(helpMenu);
  237.                 return menuBar;
  238.         }
  239.         //创建工具栏
  240.         private JToolBar getJToolBar(){
  241.                
  242.                 JToolBar toolBar=new JToolBar();
  243.                 //添加工具栏组件
  244.                
  245.                 toolBar.add(getSaveButton());//保存按钮
  246.                 toolBar.add(getQueryButton());//查询按钮
  247.                 toolBar.add(getmoreButton());//访问按钮
  248.                 toolBar.setFloatable(false);
  249.                 return toolBar;
  250.                
  251.                
  252.                
  253.                
  254.                
  255.                
  256.                
  257.                
  258.         }
  259.         //创建菜单面板
  260.         private JPanel getQueryPanel(){
  261.                 JPanel menuPanel=new JPanel();
  262.                
  263.                
  264.                 menuPanel.add(new Label("查询标题")).setFont(bigfont);
  265.                 menuPanel.add(getNewstitleText());
  266.                
  267.                
  268.                 return menuPanel;
  269.         }
  270.         //创建表格面板
  271.         private JScrollPane getTabelSollPanel(){
  272.                 JScrollPane tableSolPanel=new JScrollPane();
  273.                 tableSolPanel.setViewportView(getNewsTitleTable());
  274.                 tableSolPanel.setPreferredSize(new Dimension(1300, 650));
  275.                
  276.                 return tableSolPanel;
  277.                
  278.         }
  279.         //创建文本框面板
  280.         private JScrollPane getTextSolPanel(){
  281.                 JScrollPane messageSolePanel=new JScrollPane();
  282.                 messageSolePanel.setViewportView(getTextPaneNewsDescription());
  283.                 messageSolePanel.setPreferredSize(new Dimension(1300, 650));
  284.                 return messageSolePanel;
  285.         }
  286.         /**控件初始化*/
  287.         public JComboBox getComboBox(){
  288.                 if(comboBox==null){
  289.                         comboBox=new JComboBox();
  290.                         comboBox.setFont(bigfont);
  291.                         comboBox.addItem(new URL("腾讯-国际新闻","rss_newswj.xml"));
  292.                         comboBox.addItem(new URL("腾讯-国内新闻","rss_newsgn.xml"));
  293.                         comboBox.addItem(new URL("新浪-体育新闻","sports.xml"));
  294.                         comboBox.addItem(new URL("新浪-社会新闻","focus15.xml"));
  295.                        
  296.                 }
  297.                 return comboBox;
  298.         }
  299.         //读取按钮
  300.         public JButton getReadButton(){
  301.                 if(readButton==null){
  302.                         readButton=new JButton("读取");
  303.                         readButton.setFont(bigfont);
  304.                         readButton.setToolTipText("读取文件");//按钮提示信息
  305.                         readButton.addActionListener(readListener);
  306.                        
  307.                 }
  308.                 return readButton;
  309.         }
  310.         //保存按钮
  311.         public JButton getSaveButton(){
  312.                 if(saveButton ==null){
  313.                
  314.                         ImageIcon icon=new ImageIcon("image/保存.png");
  315.                         //ImageIcon icon=new ImageIcon("timg.jpg");
  316.                        
  317.                         saveButton =new JButton(icon);
  318.  
  319.                         saveButton.setToolTipText("保存文件");//按钮提示信息
  320.                         saveButton.addActionListener(saveListener);
  321.                        
  322.                        
  323.                
  324.                        
  325.                        
  326.                        
  327.                 }
  328.                 return saveButton ;
  329.         }
  330.         //访问按钮
  331.         public JButton getmoreButton(){
  332.                 if(moreButton ==null){
  333.                         ImageIcon icon=new ImageIcon("image/访问.png");
  334.                         moreButton =new JButton(icon);
  335.                         moreButton.setToolTipText("访问该新闻所在页面");//按钮提示信息
  336.                         moreButton.addActionListener(new ActionListener() {
  337.                                
  338.                                 @Override
  339.                                 public void actionPerformed(ActionEvent e) {
  340.                                         // TODO Auto-generated method stub
  341.                                         java.net.URI uri;
  342.                                         try {
  343.                                                 statusLabel.setText("访问外部新闻");
  344.                                                 uri = new java.net.URI(uriaddress);
  345.                                                   java.awt.Desktop.getDesktop().browse(uri);
  346.                                         } catch (Exception e1) {
  347.                                                 // TODO Auto-generated catch block
  348.                                                 e1.printStackTrace();
  349.                                         }
  350.                                        
  351.                                 }
  352.                         });
  353.                        
  354.                 }
  355.                 return moreButton ;
  356.         }
  357.         //查询按钮
  358.         public JButton  getQueryButton(){
  359.                 if(queryButton ==null){
  360.                         ImageIcon icon=new ImageIcon("image/查询.png");
  361.                         queryButton =new JButton(icon);
  362.                         queryButton.addActionListener(new ActionListener() {
  363.                                
  364.                                 @Override
  365.                                 public void actionPerformed(ActionEvent e) {
  366.                                         // TODO Auto-generated method stub
  367.                                         statusLabel.setText("查询文件");
  368.                                 }
  369.                         });
  370.                
  371.                        
  372.                 }
  373.                 return queryButton;
  374.         }
  375.         //详细新闻显示框体
  376.         public JTextField getNewstitleText(){
  377.                 if(newstitleText==null){
  378.                         newstitleText=new JTextField();
  379.                         newstitleText.setColumns(22);
  380.                         newstitleText.setFont(bigfont);
  381.                        
  382.                        
  383.                 }
  384.                 return newstitleText;
  385.         }
  386.  
  387.         //新闻标题栏
  388.         public JTable  getNewsTitleTable(){
  389.                 if(newsTitleTable==null){
  390.                         //创建新闻标题表格
  391.                         newsTitleTable=new JTable();
  392.                         //创建表格中的数据模型对象
  393.                         myTableModel defaultModel=new myTableModel(new Object [50][9],new String [] {"主题", "接受时间", "发布时间", "作者"});
  394.                
  395.                         newsTitleTable.setModel(defaultModel);
  396.                         newsTitleTable.getTableHeader().setFont(bigfont);
  397.                         newsTitleTable.setFont(font);
  398.                         newsTitleTable.setRowHeight(50);
  399.                         //设置表格的行高
  400.                         newsTitleTable.setEnabled(true);
  401.                        
  402.                         newsTitleTable.getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_SELECTION);//设置居中
  403.                         /**
  404.                          * 标题表格监听器,创建新行事件
  405.                          * */
  406.                         newsTitleTable.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
  407.                                
  408.                                 @Override
  409.                                 public void valueChanged(ListSelectionEvent arg0) {
  410.                                         // TODO Auto-generated method stub
  411.                                         //获得选中行的值
  412.                                         int row=newsTitleTable.getSelectedRow();
  413.                                         try {
  414.                                        
  415.                                                 service.showMessage(row);
  416.                                                 uriaddress=service.geturiaddress();     //获得网址
  417.                                                 statusLabel.setText(service.getTitle());//状态栏
  418.                                         } catch (Exception ex) {
  419.                                                 // TODO: handle exception
  420.                                                 //获得处理BadLocation异常信息
  421.                                                 showError("文档转换操作异常:"+ex.getMessage());
  422.                                         }
  423.                                 }
  424.                         } );
  425.                 }
  426.                 return newsTitleTable;
  427.         }
  428.         protected void showError(String string) {
  429.                 // TODO Auto-generated method stub
  430.                 System.out.println(string);
  431.         }
  432.  
  433.         public JTextPane getTextPaneNewsDescription(){
  434.                 if(textPaneNewsDescripation==null){
  435.                         //创建文本域
  436.                         textPaneNewsDescripation=new JTextPane();
  437.                         //不可编辑
  438.                         textPaneNewsDescripation.setEditable(false);
  439.                         textPaneNewsDescripation.setFont(bigfont);
  440.                        
  441.                 }
  442.                 return textPaneNewsDescripation;
  443.         }
  444.         private JPanel getStatusBar(){
  445.                 JPanel panel=new JPanel();
  446.                 panel.setLayout(new FlowLayout(FlowLayout.LEFT));
  447.                 panel.add(new Label("   "));
  448.                 statusLabel=new JLabel("北京交通大学软件学院");
  449.                 statusLabel.setFont(bigfont);
  450.                 panel.add(statusLabel);
  451.                 return panel;
  452.         }
  453.         ActionListener readListener=new ActionListener() {
  454.                 public void actionPerformed(ActionEvent e) {
  455.                         // TODO Auto-generated method stub
  456.                        
  457.                         /**目标文件*/
  458.                         String inFile;
  459.                         /**显示错误信息*/
  460.                         String errorInfo="";
  461.                         //网址字符串
  462.                         String address="";
  463.                         //获得下拉框选中项
  464.                         Object o=comboBox.getSelectedItem();
  465.                         //获得工程目录
  466.                         String dir=System.getProperty("user.dir");
  467.                         //获得下拉框选中项的文件名,赋值给网址字符串
  468.                         address=((URL)o).getAddress();
  469.                         //获得解析文件完整路径
  470.                         inFile=dir+"\\NewfeedFiles\\"+address;
  471.                                                  
  472.                         try{
  473.                                 //转编路径为UTF-8
  474.                                 inFile=URLDecoder.decode(inFile, "utf-8");
  475.                        
  476.                                 service.fileDo(inFile);
  477.                        
  478.                         }catch(IOException ioe){
  479.                                 //获得处理IO异常信息
  480.                                 errorInfo="系统找不到指定文件";
  481.                         }catch(JDOMException jde){
  482.                                 errorInfo="解析文件异常";
  483.                                 jde.printStackTrace();
  484.                         }finally{
  485.                                 showError(errorInfo);
  486.                         }
  487.                        
  488.                 }
  489.                        
  490.                        
  491.         };
  492.  
  493.         ActionListener saveListener=new ActionListener() {
  494.                
  495.                 @Override
  496.                 public void actionPerformed(ActionEvent e) {
  497.                         // TODO Auto-generated method stub
  498.                         statusLabel.setText("保存文件");
  499.                         JFileChooser chooser = new JFileChooser();
  500.                         chooser.setFileFilter(new FileNameExtensionFilter("文本文件(.txt)", "txt"));
  501.                         String path=null;
  502.                         JPanel parent = new JPanel();
  503.                         int returnVal = chooser.showOpenDialog(parent);
  504.                         if (returnVal == JFileChooser.APPROVE_OPTION) {
  505.                         path=chooser.getSelectedFile().getPath();
  506.                         }
  507.                         String filename=chooser.getSelectedFile().toString();
  508.                        
  509.                        
  510.                        
  511.                         try {
  512.                                
  513.                                 String text=null;
  514.                                 text=service.getPassage();
  515.                                  if(text!=null){
  516.                                          File file=new File(filename+".txt");
  517.                                         FileWriter out = new FileWriter(file,true);
  518.                                          out.write(service.getPassage());
  519.                                          System.out.println("保存成功,路径为"+filename+".txt");
  520.                                          out.close();
  521.                                          
  522.                                          JFrame jFrame=new JFrame("保存成功");
  523.                                          jFrame.setVisible(true);
  524.                                          jFrame.setSize(600, 400);
  525.                                          jFrame.setLocationRelativeTo(null);
  526.                                          JLabel jLabel=new JLabel("成功保存该内容!");
  527.                                          jLabel.setFont(bigfont);
  528.                                          jFrame.add(jLabel).setSize(400,200);
  529.                                  }
  530.                                  else{
  531.                                          System.out.println("保存失败");
  532.                                          JFrame jFrame=new JFrame("保存失败");
  533.                                          jFrame.setVisible(true);
  534.                                          jFrame.setSize(800, 400);
  535.                                          jFrame.setLocationRelativeTo(null);
  536.                                          JLabel jLabel=new JLabel("请在列表中选择一个要保存的内容!");
  537.                                          jLabel.setFont(bigfont);
  538.                                          jFrame.add(jLabel).setSize(600,200);
  539.                                          
  540.                                          
  541.                                  }
  542.                                  
  543.                              
  544.                            
  545.                                  
  546.                         } catch (IOException e1) {
  547.                                 // TODO Auto-generated catch block
  548.                                 e1.printStackTrace();
  549.                         }
  550.                
  551.        
  552.                                
  553.                                
  554.                                
  555.                                
  556.                                
  557.                                
  558.                        
  559.                 }
  560.         };
  561.        
  562.        
  563.        
  564.        
  565.        
  566.        
  567.        
  568.        
  569.        
  570.        
  571.        
  572.        
  573.        
  574.        
  575.        
  576. }
  577.  

回复 "RSS阅读器"

这儿你可以回复上面这条便签

captcha