好的,我有2个jPanels。
其中一个按钮有多个按钮,按下时应将文本添加到第二个jPanel中的文本字段。
我是一个新的摇摆品牌,之前只需要回写最终代码和基于网络的代码,所以我很难看到你将如何实现这一目标。
我只在一个面板中创建了按钮,在另一个面板中创建了一个文本域,所以我怀疑代码是无关紧要的。
非常感谢任何人可以指向我的文章或示例。
答案 0 :(得分:2)
所以我遇到了这个问题,
所以让我们说你有两个JFrame JFrame1 and JFrame2
为了在运行时彼此通信,两者都必须具有每个单独帧的最新初始化对象。
现在让我们说这是你的文本框的第一帧,
public class JFrame1 extends JFrame{
JTextField jTextField= null;
public JFrame1() throws HeadlessException {
super("JFrame");
setSize(200, 200);
jTextField = new JTextField();
add(jTextField);
setVisible(true);
}
public void setValueToText(String value){
jTextField.setText(value);
}
}
然后这是第二个,你的按钮在哪里,
public class JFrame2 extends JFrame{
JButton jButton= null;
JFrame1 frame1=null;
public JFrame2() throws HeadlessException {
super("JFrame");
frame1=new JFrame1();
jButton = new JButton("Clieck Me");
add(jButton);
setVisible(true);
jButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent ae) {
frame1.setValueToText("Hi");
}
});
setVisible(true);
}
public static void main(String[] args) {
JFrame2 jf= new JFrame2();
jf.setSize(200, 200);
}
}
现在只需运行第二个类文件,然后单击一个按钮,它将在第二帧的文本框中设置为hi。 所以当你看到答案在初始化的第二个对象框架中时。
我的执行就像,
答案 1 :(得分:0)
在第一个面板中单击按钮时,添加代码以更改其他面板中的文本。
mybutton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
//do your logic to change the text in another panel
}
});
答案 2 :(得分:0)
你可以使JTextField
成为封闭JFrame
的实例变量,并使其成为两个面板的内部类。这样,两个面板将引用属于外部类的相同字段。
所以,你最终会得到类似的东西:
public class Outer extends JFrame{
private JTextField text = new JTextField();
...
public Outer(){
this.add(new Inner1(), BorderLayout.NORTH);
this.add(new Inner2(), BorderLayout.SOUTH);
}
class Inner1 extends JPanel{
...
public Inner1(){
this.add(text);
}
}
class Inner2 extends JPanel implements ActionListener{
private JButton button = new JButton();
public Inner2(){
button.addActionListener(this);
}
public void actionPerformed(ActionEvent e){
if (e.getSource() == button)
text.setText("Hello StackOverFlow");
}
}
}