- Swing 的三个基本构造块:标签、按钮和文本字段
- 但是需要个地方安放它们,并希望用户知道如何处理它们。
- JFrame 类就是解决这个问题的——它是一个容器,允许程序员把其他组件添加到它里面,把它们组织起来,并把它们呈现给用户。
- JFrame 实际上不仅仅让程序员把组件放入其中并呈现给用户。比起它表面上的简单性,它实际上是 Swing 包中最复杂的组件。
- 为了最大程度地简化组件,在独立于操作系统的 Swing 组件与实际运行这些组件的操作系统之间,JFrame 起着桥梁的作用。
- JFrame 在本机操作系统中是以窗口的形式注册的,这么做之后,就可以得到许多熟悉的操作系统窗口的特性:最小化/最大化、改变大小、移动。
import java.awt.*;
import java.awt.event.*;
import java.io.IOException;
import java.net.*;
import javax.swing.*;
import javax.swing.event.HyperlinkEvent;
import javax.swing.event.HyperlinkListener;
public class HTTPBrowserDemo extends JFrame {
private JLabel jlAddress,jlInfo;
private JTextField jtfAddress;
private JEditorPane jtpShow;
private JPanel panel;
private JButton btnGO;
public static void main(String[] args) {
HTTPBrowserDemo hbd=new HTTPBrowserDemo();
}
HTTPBrowserDemo(){
jlAddress=new JLabel("地址");
jlInfo=new JLabel();
jtpShow=new JEditorPane();
panel=new JPanel();
jtfAddress=new JTextField(20);
btnGO=new JButton("转到");
add(panel,BorderLayout.NORTH);
add(jtpShow,BorderLayout.CENTER);
add(jlInfo,BorderLayout.SOUTH);
panel.add(jlAddress);
panel.add(jtfAddress);
panel.add(btnGO);
setVisible(true);
setSize(350, 280);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
btnGO.addActionListener(new ShowHTMLListener());
jtpShow.setEditable(false);
jtpShow.addHyperlinkListener(new MyHyperlinkListener());
}
class ShowHTMLListener implements ActionListener{
public void actionPerformed(ActionEvent e){
String str=jtfAddress.getText();
try {
if (!str.startsWith("http://")){
str="http://"+str;
}
jlInfo.setText("连接中...");
URL address=new URL(str);
jtpShow.setPage(address);
jlInfo.setText("完成");
} catch (MalformedURLException e1) {
e1.printStackTrace();
} catch (IOException e2) {
}
}
}
class MyHyperlinkListener implements HyperlinkListener{
public void hyperlinkUpdate(HyperlinkEvent e) {
if(e.getEventType()==HyperlinkEvent.EventType.ACTIVATED){
JEditorPane pane=(JEditorPane)e.getSource();
try {
pane.setPage(e.getURL());
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
}
}