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());
}
}
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());
}
}
输出结果:
按钮
按钮
代码中这两句要这么写:
this.getContentPane().add(panelUp, BorderLayout.NORTH);
this.getContentPane().add(panelDown, BorderLayout.CENTER);
用了两个面板的确是不行
面板刷新的问题吧
把按钮和文本框放在同一个panel里就行了
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是不
会发生改变的。