我有一个GUI屏幕,其中有一个标签。我现在要使用下面的文本(Test)设置文本标签。但是它没有更新。我认为下面的代码中有错误,我在try块中重新创建FrameTest的新对象;

FrameTest frame = new FrameTest();
frame.setVisible(true); //(the full code given below)


完整代码:注意:以下类是从JFrame扩展的

import java.awt.BorderLayout;

public class FrameTest extends JFrame {

    private JPanel contentPane;
    private JLabel lblLabel;

    public  void mainScreen() {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    FrameTest frame = new FrameTest();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }


    public void writeLabel(String k){
        this.lblLabel.setText(k);

    }


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

        lblLabel = new JLabel("LABEL");
        contentPane.add(lblLabel, BorderLayout.CENTER);
    }

}


测试班

public class Test {

    public static void main(String[] args) {

         FrameTest f = new FrameTest();
         f.mainScreen();
         f.writeLabel("FFFFF");
}}


帮助,如何使Text "FFFFF"显示在标签上?

最佳答案

在您的mainScreen()中,您将创建一个新的FrameTest,该新的main与您在例程中创建的不同,因此它实际上是在更改不可见框架的文本。尝试以下方法:

private FrameTest frame = this;

public  void mainScreen() {
    EventQueue.invokeLater(new Runnable() {
        public void run() {
                frame.setVisible(true);
        }
    });
}


或者简单地:

public  void mainScreen() {
    EventQueue.invokeLater(new Runnable() {
        public void run() {
                setVisible(true);
        }
    });
}

08-25 10:59
查看更多