应用名称:海大新闻客户端
用到的知识:Java GUI编程
开发环境:win10+eclipse+jdk1.8
GdouNews.java
用到的知识:Java GUI编程
开发环境:win10+eclipse+jdk1.8
功能说明:从海大官方网站获取新闻信息并在java中显示出来,点击标题可跳转到相应的网页。这个是大二的时候学校某个团队的招新题目,具体的要求不记得了,好像是这样的,应为当时我还没有接触到java的任何内容所以就没做了。这两天突然想起来然后就想做一下,没想到还是没有做的出来,只做出一个半成品,弄了两天了,感觉自己好渣好渣的。。。等以后想到办法,或者有大牛看到这篇东西在算吧
。
这个程序的问题就一个,那就是明明有很多条记录(看效果图下面那张图就是输出到控制台的结果),不知道为什么就只是显示最后一条,试了很多方法都显示不出来,能解决这个问题,那么这个程序就算是完成了!!
效果图:
源代码:
LinkLabel.java
import java.awt.Desktop;
import java.io.IOException;
import java.net.URI;
import java.util.LinkedList;
import javax.swing.JEditorPane;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.event.HyperlinkEvent;
import javax.swing.event.HyperlinkListener;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
public class LinkLabel extends JFrame implements HyperlinkListener {
/**
*
*/
private static final long serialVersionUID = 1L;
static Document doc;
private JEditorPane jEditorPane; // 可编辑各种内容的文本组件,用来显示HTML
Desktop desktop = Desktop.getDesktop();
String str1,str2="";
//初始化界面
public LinkLabel() {
jEditorPane = new JEditorPane();
this.add(jEditorPane);
jEditorPane.setEditable(false);
jEditorPane.setContentType("text/html");//文本类型设置为html
jEditorPane.setText("<html><body><a href='https://www.baidu.com/'>\u767E\u5EA6</a></body></html>\r\nd\r\ns\r\ns\r\ns");
jEditorPane.addHyperlinkListener(this);//添加链接监听器
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
}
//对网页进行内容获取和过滤
public void article() {
try {
doc = Jsoup.connect("http://www.gdou.edu.cn/").get();//进行操作的网页链接
Elements ListDiv = doc.getElementsByAttributeValue("class", "fl");//筛选出网页标签内类型为class ,class标志是fl的部分
for (Element element : ListDiv) {
Elements links = element.getElementsByTag("a");//获取筛选内容中<a></a>标签也就是网页链接那个标签里的内容
for (Element link : links) {
String linkHref = link.attr("href");//筛选出链接
String linkText = link.text().trim();
String url="<html><body><a href='"+linkHref+"'>"+linkText+"</a></body></html>";//把获取的链接再次转换为html语句以便在java界面中显示
str1=url+"\n";
str2=str1+str2;//由于没有JEditorPane没有add方法逐条添加内容,暂时用字符串叠加代替
jEditorPane.setText(str2);//设置界面的内容
}
}
} catch (IOException e) {
e.printStackTrace();
System.out.println("error");
}
}
//添加事件,若点击链接就会获取链接并打开默认的浏览器转到相应的网页去
public void hyperlinkUpdate(HyperlinkEvent e) {
if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
try {
URI uri = new URI(e.getURL().toString());
desktop.browse(uri);
} catch (Exception ex) {
ex.printStackTrace();
System.err.println("connection error");
}
}
}
}
GdouNews.java
public class GdouNews {
public static void main(String[] args) {
LinkLabel linkLabel= new LinkLabel();
linkLabel.article();
linkLabel.setBounds(300, 250, 600, 400);
linkLabel.setTitle("海大新闻客户端");
linkLabel.setVisible(true);
}
}