Java 如何将数据从另一个类传递到GUI?

Java 如何将数据从另一个类传递到GUI?,java,swing,user-interface,Java,Swing,User Interface,如何使用GUI将数据/值从一个类传递到另一个类?我试图将message2数组传递到GUI中的namesOut标签。我被卡住了,而且出错了 package testClassesGUI; public class Logic { private String[] someArray = { "Great", "World" }; // getter method public String[] message2(){ return someArra

如何使用GUI将数据/值从一个类传递到另一个类?我试图将message2数组传递到GUI中的
namesOut
标签。我被卡住了,而且出错了

package testClassesGUI;

public class Logic {

    private String[] someArray = { "Great", "World" };



    // getter method
    public String[] message2(){
        return someArray;
    }


    // setter method
    public void setSomeArray(String[] someArray){
        this.someArray = someArray;
    }

    UI logicObject = new UI();
    logicObject.namesOut.setText(message2); //here my error misplaced construct(s), variable declaratoridexpected
}
这是我的密码:

桂 逻辑: 这里我得到一个错误

package testClassesGUI;

public class Logic {

    private String[] someArray = { "Great", "World" };



    // getter method
    public String[] message2(){
        return someArray;
    }


    // setter method
    public void setSomeArray(String[] someArray){
        this.someArray = someArray;
    }

    UI logicObject = new UI();
    logicObject.namesOut.setText(message2); //here my error misplaced construct(s), variable declaratoridexpected
}

非常感谢您的帮助。

namesOut
是UI构造函数中声明的局部变量。您无法从
逻辑
访问它。将其声明为公共成员变量

public JLabel namesOut;

你必须定义一个函数。可能是一个构造器:

Logic () {
    logicObject.namesOut.setText(message2);
}
您也可以在代码块内执行,但这并不常见:

{
    logicObject.namesOut.setText(message2);
}    

把这个放在你的UI构造器中。您应该在其中创建一个
逻辑
对象

    public UI() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 450, 300);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(null);

        JLabel lblDisplayOutNames = new JLabel("Display out names:");
        lblDisplayOutNames.setBounds(32, 25, 121, 16);
        contentPane.add(lblDisplayOutNames);

        JLabel namesOut = new JLabel(""); //here i need to bring the data
        namesOut.setBounds(32, 63, 228, 87);
        contentPane.add(namesOut);

        Logic logic = new Logic();           <<---
        String[] array = logic.message2();       |
                                                 |
        String s = "";                           |
        for (String str : array){                |
            s += str + " ";                      |
        }                                        |
                                                 |
        namesOut.setText(s);                <<----
    }

因此,最好的做法是将所有内容都放到GUI类中,而不是调用它并从逻辑类传递它吗?好的,我明白你的意思。只是出于好奇。如果我想从那里而不是从GUI类传递/调用它,逻辑类会是什么样子?我很感激。您仍然需要在UI类中创建一个逻辑实例。没办法绕过它。如果不创建实例,则无法从另一个类在gui中的标签上设置文本。在这种情况下,您可以有一个接受JLabel参数的方法。但这真是糟糕的设计。你可能对这个问题感兴趣?如何调用逻辑()它没有被拾取
setBounds(100100450300)1)不要设置顶级容器的大小。而是布局内容&调用
pack()
。2) 不需要在标题中添加主标记。
UI logicObject = new UI();
logicObject.namesOut.setText(message2);