【发布时间】:2013-03-29 19:54:23
【问题描述】:
为什么我们在构建 Swing 应用程序时需要扩展 JFrame 类。据我所知extends 用于继承基类。以下程序中没有使用JFrame 类的任何功能,但仍对其进行了扩展。我知道我错过了一些信息。是不是JFrame类的一些功能在后台运行。
1) 代码
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.JPasswordField;
import javax.swing.JOptionPane;
public class tuna extends JFrame{
private JTextField item1;
private JTextField item2;
private JTextField item3;
private JPasswordField passwordField;
Container contentPane ;
public tuna(){
super("The title");
setLayout(new FlowLayout());
item1 = new JTextField(10);
contentPane.add(item1);
item2 = new JTextField("enter text here");
add(item2);
item3 = new JTextField("uneditable", 20);
item3.setEditable(false);
add(item3);
passwordField = new JPasswordField("mypass");
add(passwordField);
thehandler handler = new thehandler();
item1.addActionListener(handler);
item2.addActionListener(handler);
item3.addActionListener(handler);
passwordField.addActionListener(handler);
}
public static void main(String[] args){
tuna aye = new tuna();
}
private class thehandler implements ActionListener{
public void actionPerformed(ActionEvent event){
String string = "";
if(event.getSource()==item1)
string=String.format("field 1: %s",event.getActionCommand());
else if (event.getSource()==item2)
string=String.format("field 2: %s",event.getActionCommand());
else if (event.getSource()==item3)
string=String.format("field 3: %s",event.getActionCommand());
else if (event.getSource()==passwordField)
string=String.format("password field is: %", event.getActionCommand());
}
}
}
【问题讨论】:
-
这个问题的前提是错误的。您不必为了使用它而扩展 JFrame。
-
实际上,您应该不扩展 JFrame(也不应该扩展任何其他类,除非您真正增强功能,即实现通过使用/配置无法实现的功能class) - 大多数教程和 Netbeans 都给出了不好的例子:-)