从panel2中的按钮添加到panel1中的文本字段

时间:2014-12-25 17:30:55

标签: java swing action panel

好的,我有2个jPanels。

其中一个按钮有多个按钮,按下时应将文本添加到第二个jPanel中的文本字段。

我是一个新的摇摆品牌,之前只需要回写最终代码和基于网络的代码,所以我很难看到你将如何实现这一目标。

我只在一个面板中创建了按钮,在另一个面板中创建了一个文本域,所以我怀疑代码是无关紧要的。

非常感谢任何人可以指向我的文章或示例。

3 个答案:

答案 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. 运行JFrame2
  2. 在JFame2 const中初始化JFrame1。

答案 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");
        } 
      }
}