⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rssreader.java

📁 我用JAVA写的一个小巧的RSS阅读器(需要安装JAVA才能运行哦)。
💻 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>&nbsp;"+(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 + -