📄 rssreader.java
字号:
package reader;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.MenuItem;
import java.awt.PopupMenu;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ComponentEvent;
import java.awt.event.ComponentListener;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.awt.event.InputEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import javax.swing.*;
public class RssReader extends WindowAdapter implements ActionListener,ComponentListener{
private JFrame jf;
private String url;
private JPanel jp;
private JButton jb;
private JScrollPane js;
private XMLReader reader;
private JWindow jfc;
private JPanel jpc;
private JScrollPane jsc;
private JLabel title;
private JLabel link;
private LinkListener listener;
private MenuItem menuItem1;
private MenuItem menuItem2;
private MenuItem menuItem3;
private final PopupMenu menu;
public RssReader()
{
Dimension screenSize=Toolkit.getDefaultToolkit().getScreenSize();
jf=new JFrame("XMLReader");
jf.setSize(200, 300);
Dimension frameSize=jf.getSize();
jf.setLocation((screenSize.width-frameSize.width)/2,(screenSize.height-frameSize.height)/2);
jp=new JPanel();
jp.setLayout(new BoxLayout(jp,BoxLayout.Y_AXIS));
js=new JScrollPane(jp,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
menu=createMenu();
jf.add(menu);
jfc=new JWindow();
//jfc.setUndecorated(true);
//BorderLayout lay=new BorderLayout();
jfc.setLayout(new BorderLayout());
jfc.setVisible(false);
jpc=new JPanel();
jsc=new JScrollPane(jpc,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
title=new JLabel();
title.setOpaque(true);
title.setBackground(Color.BLACK);
title.setForeground(Color.WHITE);
link=new JLabel();
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.setLayout(new BorderLayout());
jb=new JButton(" 更改URL");
jf.add(jb, BorderLayout.NORTH);
jb.addActionListener(this);
jf.addWindowListener(this);
jf.addComponentListener(this);
jf.setResizable(false);
jf.setVisible(true);
init("http://rss.zol.com.cn/laptop.xml");
}
public void init(String url)
{
jp.removeAll();
jf.remove(js);
reader=new XMLReader(url);
jf.setTitle(reader.XMLData.title);
for(int i=0;i<reader.XMLData.size;i++)
{
final JLabel jl;
final int index=i;
jl=new JLabel("<html> "+(i+1)+"."+reader.XMLData.item[i][0]+"<br><br></html>");
jl.setToolTipText(reader.XMLData.item[i][0]);
jl.setOpaque(true);
jl.addMouseListener(
new MouseAdapter()
{
@Override
public void mouseClicked(MouseEvent e)
{
int mods=e.getModifiers();
if((mods&InputEvent.BUTTON3_MASK)!=0)
{
menu.show(jl,e.getX(),e.getY());
}else
{
getContent(index);
}
}
@Override
public void mouseEntered(MouseEvent e)
{
jl.setBackground(Color.GRAY);
}
@Override
public void mouseExited(MouseEvent e)
{
jl.setBackground(Color.WHITE);
}
}
);
jp.add(jl);
}
jf.add(js,BorderLayout.CENTER);
jf.validate();
}
public void getContent(int index)
{
jfc.remove(jsc);
jfc.remove(title);
jfc.setSize(260,260);
jpc.removeAll();
title.setText("<html>"+reader.XMLData.item[index][0]+"</html>");
link.setText("<html><div style=\"margin-bottom:7px;margin-left:150px\"><a href="+reader.XMLData.item[index][1]+" >阅读全文</a></div></html>");
link.setCursor(new Cursor(Cursor.HAND_CURSOR));
if(listener!=null)
{
link.removeMouseListener(listener);
}
listener=new LinkListener(reader.XMLData.item[index][1]);
link.addMouseListener(listener);
int w=jfc.getWidth();
int h=jfc.getHeight()-title.getHeight()-link.getHeight();
JEditorPane jl=new JEditorPane("text/html","<table style=\"margin-right:20px\" width="+(w-22)+" height="+h+"><tr><td>"+reader.XMLData.item[index][2]+"</td></tr></table>");
jl.setEditable(false);
jpc.add(jl);
jfc.add(link,BorderLayout.SOUTH);
jfc.add(jsc,BorderLayout.CENTER);
jfc.add(title,BorderLayout.NORTH);
jfc.setLocation(jf.getLocation().x+200, jf.getLocation().y+4);
jfc.setVisible(false);
jfc.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==jb||e.getSource()==menuItem1)
{
url=JOptionPane.showInputDialog("更改URL");
if(url!=null)
{
init(url);
}
}else if(e.getSource()==menuItem2)
{
if(url!=null)
{
init(url);
}
}else if(e.getSource()==menuItem3)
{
System.exit(0);
}
}
public void windowDeactivated(WindowEvent e)
{
jfc.setVisible(false);
}
@Override
public void componentHidden(ComponentEvent e) {
// TODO Auto-generated method stub
}
@Override
public void componentMoved(ComponentEvent e) {
// TODO Auto-generated method stub
jfc.setLocation(jf.getLocation().x+200, jf.getLocation().y+4);
}
@Override
public void componentResized(ComponentEvent e) {
// TODO Auto-generated method stub
}
@Override
public void componentShown(ComponentEvent e) {
// TODO Auto-generated method stub
}
class LinkListener extends MouseAdapter
{
String href;
public LinkListener(String url)
{
this.href=url;
}
public void mouseClicked(MouseEvent e)
{
Runtime rt = Runtime.getRuntime();
try{
rt.exec("explorer.exe "+href);
}catch(Exception eX){
JOptionPane.showMessageDialog(null, "命令执行失败!");
}
}
}
public PopupMenu createMenu()
{
PopupMenu popupMenu1 = new PopupMenu();
menuItem1=new MenuItem();
menuItem2=new MenuItem();
menuItem3=new MenuItem();
menuItem1.setLabel("更改URL");
menuItem1.addActionListener(this);
menuItem2.setLabel("刷新");
menuItem2.addActionListener(this);
menuItem3.setLabel("退出");
menuItem3.addActionListener(this);
popupMenu1.add(menuItem1);
popupMenu1.add(menuItem2);
popupMenu1.add(menuItem3);
//在this中加入popupMenu1
return popupMenu1;
}
public static void main(String[] args)
{
new RssReader();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -