将文本显示在另一个类的标签上 - JFrame

时间:2012-11-20 09:48:47

标签: java swing

我有一个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");
}}

帮助,如何在标签上显示文字"FFFFF"

5 个答案:

答案 0 :(得分:2)

向FrameTest添加方法

public String readLabel(){
       return this.lblLabel.getText();
}

答案 1 :(得分:2)

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

或者简单地说:

{{1}}

答案 2 :(得分:1)

将mainScreen()函数更改为

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

其余代码相同

答案 3 :(得分:0)

您使用代码的方式不会触发您的框架或标签的重绘。 在Swing中,您可以更改许多Gui对象,但只有在请求时才会在一个批处理中重绘它们。 重新绘制自动发生的最常见情况是从事件处理程序返回后。 (例如按下按钮或按键)

答案 4 :(得分:0)

将try块替换为;

            try {
                setVisible(true);
            } catch (Exception e) {
                e.printStackTrace();
            }

一切正常!