1

我有一个 jFrame,它有一个 jTextbox 和一个按钮。另一个 jFrame 有一个 jLabel。当按下按钮时,我想将写在第一帧文本框中的文本带到第二帧的 jLabel 中。当我对此进行搜索时,我得到了一些不可靠的答案。但据我所知,可以通过创建另一个静态类或调用此引用来完成。

4

2 回答 2

8

这是一个你想要实现的“什么”的问题,这将推动“如何”......

例如...

您可以在第一帧中维护对第二帧的引用,当单击按钮时,告诉第二帧发生了变化......

public class FirstFrame extends JFrame {
    // Reference to the second frame...
    // You will need to ensure that this is assigned correctly...
    private SecondFrame secondFrame;
    // The text field...
    private JTextField textField;

    /*...*/

    // The action handler for the button...
    public class ButtonActionHandler implements ActionListener {
        public void actionPerformed(ActionEvent evt) {
            secondFrame.setLabelText(textField.getText());
        }
    }
}

这样做的问题是它暴露SecondFrame给第一个,允许它对它做讨厌的事情,例如删除所有组件。

更好的解决方案是提供一系列接口,允许两个类相互通信......

public interface TextWrangler {
    public void addActionListener(ActionListener listener);
    public void removeActionListener(ActionListener listener);
    public String getText();
}

public class FirstFrame extends JFrame implements TextWrangler {
    private JButton textButton;
    private JTextField textField;

    /*...*/

    public void addActionListener(ActionListener listener) {
        textButton.addActionListener(listener);
    }

    public void removeActionListener(ActionListener listener) {
        textButton.removeActionListener(listener);
    }

    public String getText() {
        return textField.getText();
    }
}

public class SecondFrame extends JFrame {
    private JLabel textLabel;
    private JTextField textField;
    private TextWrangler textWrangler;

    public SecondFrame(TextWrangler wrangler) {
        textWrangler = wrangler;
        wrangler.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
                textLabel.setText(textWrangler.getText());
            }
        });
        /*...*/
    }
}

这基本上限制了SecondFrame可以实际访问的内容。虽然可以说ActionListener可以SecondFrame使用ActionEvent源来查找更多信息,但从本质上讲,这将是一个不可靠的机制,因为interface没有提到它应该如何实施......

这是观察者模式的一个基本示例

于 2013-09-03T00:09:37.777 回答
0

在两个 JFrame 之间传递数据的最简单方法是创建一个公共方法。这样,您可以在要获取数据的类中创建公共方法,并使用第二类的对象直接调用此方法。而且,如果您想在不创建额外对象的情况下调用它,而不仅仅是让您的方法静态并直接使用类名进行调用。有关更多详细信息,请访问链接

于 2021-08-21T17:21:49.827 回答