gpt4 book ai didi

java - 如何更改另一个类的私有(private)变量 JTextField 或为其赋值?

转载 作者:搜寻专家 更新时间:2023-11-01 03:23:54 26 4
gpt4 key购买 nike

如果这又是一个愚蠢的问题,我很抱歉,但我仍然是 Java 编程语言的新手。

我有 3 个类:InputClassPreviewClassMainClass

MainClass 包含运行程序的main 方法InputClass 包含用于输入的 private JTextField 和用于将文本设置到 中的 JTextFieldJButton预览类PreviewClass 包含一个私有(private)的 JTextField 以在 InputClass 中显示输入的文本。

我该如何做到这一点(将值分配给 PreviewClass 中的 JTextField)而无需创建一个实例 InputClass,然后使用 getter-method-like 获取它的值,或者,没有制作 JTextFieldInputClass 中添加一个 static 变量,以便我可以使用一些 static 方法 访问它?

为了向您展示我的观点,这里是代码:

  1. 输入类

     import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;

    public class InputClass extends JPanel implements ActionListener{

    private JTextField inputName;
    private JButton inputButton;

    public InputClass() {
    setLayout(new FlowLayout());

    inputName=new JTextField(15);
    inputButton=new JButton("INPUT");
    inputButton.addActionListener(this);

    add(inputName);
    add(inputButton);
    }

    @Override
    public void actionPerformed(ActionEvent event) {
    // How do I change/assign a text to the PreviewClass from here?
    }

    }
  2. 预览类

     import javax.swing.*;
    import java.awt.*;

    public class PreviewClass extends JPanel{
    private JTextField namePreview;

    public PreviewClass() {
    setLayout(new FlowLayout());

    namePreview=new JTextField(15);
    namePreview.setEditable(false);

    add(namePreview);
    }

    }
  3. 主类

    import javax.swing.*;
    import java.awt.*;

    public class MainClass extends JFrame{
    private static final int FRAME_WIDTH=250;
    private static final int FRAME_HEIGHT=150;
    private static final int FRAME_X_ORIGIN=400;
    private static final int FRAME_Y_ORIGIN=300;

    private InputClass inputPanel;
    private PreviewClass previewPanel;

    private JTabbedPane tabbedPane;
    private Container contentPane;

    public MainClass() {
    contentPane=getContentPane();
    contentPane.setLayout(new BorderLayout());

    setTitle("How to Assign Value from Another Class");
    setSize(FRAME_WIDTH, FRAME_HEIGHT);
    setLocation(FRAME_X_ORIGIN, FRAME_Y_ORIGIN);

    inputPanel=new InputClass();
    previewPanel=new PreviewClass();

    tabbedPane=new JTabbedPane();
    tabbedPane.add("Input Name", inputPanel);
    tabbedPane.add("Preview Name", previewPanel);

    contentPane.add(tabbedPane, BorderLayout.CENTER);

    setDefaultCloseOperation(EXIT_ON_CLOSE);
    }

    public static void main(String[] args) {
    MainClass frame=new MainClass();
    frame.setVisible(true);
    }
    }

最佳答案

您有许多可能的解决方案,各有利弊。

如果我遇到这样的问题,我会很想创建一个 interface 来描述可以更改的内容以及如何更改,甚至可能在 的内部状态时提供事件通知>界面改变。

然后我将创建此 interface 的实例并将其传递给每个类。那些需要它的值的类将从它读取它们需要的值,如果可用,附加某种更改/属性监听器,以便它们可以监视对 interface 的更改。

那些需要对 interface 进行更改的类会根据需要进行更改。

当它发生变化时,接口(interface) 会触发更新,让任何正在收听的人都知道已经进行了更改。

通过这种方式,您可以将类与每个类解耦,并减少其他类的不必要暴露。

这是 MVC 范例中的“模型”,描述了 observer pattern

关于java - 如何更改另一个类的私有(private)变量 JTextField 或为其赋值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20630577/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com