我有一个在 JFrame 中创建 JPanel 的应用程序,如下所示:
public class Frame1{
public Frame1(){
Frame2 f2 = new Frame2();
f2.pack();
f2.setVisible(true);
}
class Frame2 extends JFrame{
public Frame2(){
JPanel p1 = new JPanel();
JTextField txt1 = new JTextField("Test",12);
p1.add(txt1);
JButton btn1 = new JButton("Click Me!");
p1.add(btn1);
add(p1);
btn1.addActionListener(this);
}
public void actionPerformed(ActionEvent e){
JOptionPane.showDialog(null,text of the textbox);
}
}
}
有没有办法引用文本字段,即使它不是字段变量并且只是在构造函数中声明(this.getRootPane().getParent()
会给我框架我相信,但我从那里去哪里)?
最佳答案
再次重申,为什么不让 JTextField 成为该类的私有(private)非静态字段:
import java.awt.event.*;
import javax.swing.*;
public class Frame1 {
public Frame1() {
Frame2 f2 = new Frame2();
f2.pack();
f2.setVisible(true);
}
class Frame2 extends JFrame implements ActionListener {
private JTextField txt1;
public Frame2() {
JPanel p1 = new JPanel();
// JTextField txt1 = new JTextField("Test", 12);
txt1 = new JTextField("Test", 12);
p1.add(txt1);
JButton btn1 = new JButton("Click Me!");
p1.add(btn1);
add(p1);
btn1.addActionListener(this);
}
// if outside classes need to see the text
public String getTxt1Text() {
return txt1.getText();
}
public void actionPerformed(ActionEvent e) {
JOptionPane.showMessageDialog(this, txt1.getText());
}
}
}
关于java - 从 JFrame 引用 JPanel 组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7788539/