当前位置: 首页 > 面试题库 >

使用静态类或此引用将数据从一个Jframe传输到另一个Jframe?

严兴旺
2023-03-14
问题内容

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


问题答案:

您要实现的“什么”问题将推动“如何”发展。

例如…

您可以在第一帧中保持对第二帧的引用,并在单击按钮时告诉第二帧发生了更改。

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没有提及应如何实施…

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



 类似资料:
  • 问题内容: 嗨,我试图将一些文本附加到同一包中另一个类的一个小问题。以下是与JFrame有关的主要类: 我包括测试变量只是为了轻松地重新创建问题,但是无论何时运行append函数,jFrame的文本区域中都不会出现任何内容。在我的方案中,我让客户端从服务器接收文本,然后将其附加到文本框中。 顺便说一句,我正在为JFrame使用IntelliJ GUI设计器。我只包含了重新创建问题所需的代码。我仍在

  • 我有一个组件A,它触发一个对话框 此组件触发PicuploadComponent,我在此上传图像并接收带有一些数据响应

  • 问题内容: 我有两个 newAccessLevels.java ,它有两个按钮“ Level 1”,“ Level 2”和 newAccessPanel.java。 我需要获取用户选择“ 1或2”的级别,以便可以在标题中显示它。 accessPanel.java, 例如访问级别1,访问级别2。如何完成此操作。下面是示例代码,因此,如果单击级别1,则将打开标题为* ACCESS LEVEL 1 的n

  • 问题是: 在本例中,我通过用芒果扩展MainClass得到了结果:mango two。但是在我的项目中,MainClass已经扩展到了另一个类。这就是为什么我要使用一个接口,我将用MainClass实现Mango类的重写方法 好像我可以从芒果类接收数据

  • 问题内容: 将尽可能多的字节从ByteBuffer 放入另一个ByteBuffer 的最有效方法是什么(以及知道传输了多少字节)?我正在尝试,但似乎要抛出BufferOverflowException,当我需要它们时,我现在无法从Sun获取Javadocs(网络问题)。> :( argh。 编辑:darnit,如果bbuf_src是ReadOnly缓冲区,则@Richard 的方法(使用来自bac

  • 问题内容: 我需要将数据从一个表复制到另一个表。这两个表几乎具有相同的结构,但是位于不同的数据库中。 我试过了 我尝试此操作,但跨数据库出现错误…未实现 问题答案: 这是一个非常简单的任务。只需为此目的使用dblink: 如果您需要定期从外部数据库中获取数据,明智的做法是定义服务器和用户映射。然后,您可以使用较短的语句: