为何用了二个面板,不能设置其中一个面板的文本框的内容?
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class SwingTest {
public static void main(String[] args) {
CFrame frame = new CFrame();
}
}
class CFrame extends JFrame{
CPanelUp panelUp = new CPanelUp(); // 上面显示的结果文本框面板.
CPaneDown panelDown = new CPaneDown(); // 下面显示的计算器的按钮面板.
CFrame(){ // JFrame默认的边框布局.
this.add(panelUp,BorderLayout.NORTH);
this.add(panelDown,BorderLayout.CENTER);
this.setSize(220,280);
this.setLocation(100,100);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
}
class CPanelUp extends JPanel{
TextField resultText = new TextField(20);
CPanelUp(){
this.setBackground(Color.RED);
this.add(resultText);
}
class Event implements ActionListener{
public void actionPerformed(ActionEvent e) {
JButton clicked = (JButton)e.getSource();
resultText.setText(clicked.getText()); // 这里为什么不能设置文本框的值.
System.out.println(clicked.getText()); // 而在这里却可以发现按钮确实单击了.
System.out.println(resultText.getText()); // 文本框的值也可以get出来.
}
}
}
class CPaneDown extends JPanel{
JButton button = new JButton("按钮");
CPaneDown(){
this.add(button);
CPanelUp tt = new CPanelUp();
button.addActionListener(tt.new Event());
}
}
问题点数:100、回复次数:3Top
1 楼tjjzs(王、)回复于 2006-03-09 11:24:10 得分 100
你确定不行?
输出结果:
按钮
按钮
代码中这两句要这么写:
this.getContentPane().add(panelUp, BorderLayout.NORTH);
this.getContentPane().add(panelDown, BorderLayout.CENTER);Top
2 楼tjjzs(王、)回复于 2006-03-09 11:53:08 得分 0
不好意思,没看清楚楼主的意思
用了两个面板的确是不行
面板刷新的问题吧
把按钮和文本框放在同一个panel里就行了
Top
3 楼fly_ya(老猫)回复于 2006-03-10 18:41:48 得分 0
class CPaneDown extends JPanel{
JButton button = new JButton("按钮");
CPaneDown(){
this.add(button);
CPanelUp tt = new CPanelUp();
button.addActionListener(tt.new Event());
}
}
实际上,在CPanelUp tt = new CPanelUp();这里又重新生成了一个CPanelUp对象,
而这一个对象并不是在Frame中产生的,所以在Frame中的CpanelUp中的Text是不
会发生改变的。Top




