import java.awt.event.*;
import java.awt.event.ActionListener;
import java.awt.*;
import javax.swing.*;
public class Test extends JFrame implements ActionListener{
/**
*
*/
private static final long serialVersionUID = 1L;
JPanel p;
JTextField field = new JTextField();
JButton button;
JLabel label;
Test frame ;
//绘制界面
public void lunchFrame(){
frame = new Test();
button = new JButton("点击");
label = new JLabel();
Container content = this.getContentPane();
p = new JPanel();
p.setLayout(new BorderLayout());
content.add(p);
p.add(field,BorderLayout.NORTH);
p.add(label,BorderLayout.CENTER);
p.add(button,BorderLayout.SOUTH);
frame.setSize(100,200);
frame.setTitle("title");
frame.setVisible(true);
frame.setResizable(false);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
button.addActionListener(frame);
System.out.println("dddd");
}
//构造方法
public Test(){
}
//主函数
public static void main(String[] args){
Test test = new Test();
test.lunchFrame();
}
//事件响应
@Override
public void actionPerformed(ActionEvent e) {
if(e.getActionCommand().toString().equals("点击")){
if(field.getText().equals("")!=true){
label.setText("您输入的内容为\n:"+field.getText());
}
}
}
}
上面的代码是创建一个窗体,有TextField,JButton,JLabel三个组件,当点击Button时将TextField中的内容显示在JLabel中。
如果你按上面的程序实现,你会发现根本行不通,下面是他的运行拷屏。(拷不上)
会发现他的界面并没有出现Button等之类的空间。
原因在于:仔细观察lunchFrame()方法中
frame = new Test();
这正是问题的所在,想一想如果写成frame = this;有会怎样的结果。答案是真确显示。
那为什么会出现上面的问题,就在于你在launchFrame()中frame = new Test();
同时在主函数中Test test = new Test();test.lunchFrame();注意test和frame是
两个不同的对象,所有的组件都添加在了frame身上而并非test身上,所以在你test.lunchFrame()
时,test中没有添加任何组件,所以就会出现上面的运行结果。
将上面lunchFrame()中
frame = new Test();改为
frame = this;
效果实现:。(拷不上)
Java Swing界面异常解析
本文通过一个具体的Java Swing示例程序,分析了由于对象引用不当导致界面元素未能正确显示的问题,并给出了修正方案。
1975

被折叠的 条评论
为什么被折叠?



