java – 如何从另一个类更改或分配值到私有变量JTextField?

对不起,如果这是另一个愚蠢的愚蠢问题,但我仍然是
Java编程语言的新手.

我有3个类:InputClass,PreviewClass和MainClass.

MainClass包含运行程序的主要方法. InputClass包含一个用于输入的私有JTextField和一个用于将文本设置为PreviewClass中的JTextField的JButton. PreviewClass包含一个私有JTextField,用于在InputClass中显示输入的文本.

我怎么能这样做(在PreviewClass中为JTextField赋值)而不创建InputClass的实例,然后使用getter-method-like来获取它拥有的值,或者不使InputClass中的JTextField成为静态变量,这样我就可以访问它用一些静态方法?

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

> InputClass

 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?
     }

 }

> PreviewClass

 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);
     }

 }

> MainClass

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);
    }
}

最佳答案 你有许多可能的解决方案,都有利有弊.

如果我遇到这样的问题,我很想创建一个界面来描述可以更改的内容,以及当界面的内部状态发生变化时甚至可能提供事件通知.

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

需要对界面进行更改的那些类将根据需要进行更改.

随着它的改变,界面将触发更新,让任何正在倾听的人都知道已经进行了更改.

通过这种方式,您可以将每个类分离,并减少其他类的不必要的暴露.

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

点赞