【问题标题】:Text in Label not displaying correctly with setText method使用 setText 方法无法正确显示 Label 中的文本
【发布时间】:2009-11-21 15:57:16
【问题描述】:

我试图通过在单击按钮时调用 setText 方法来动态设置标签中的文本。这是我的代码:

import java.awt.*;
import java.awt.event.*;

class Date {
    public static void main(String[] args) {
        new MainWindow();
    }
}

class MainWindow {
    static Label month = new Label();
    static Label day = new Label();
    static Button submit = new Button("Submit");

    MainWindow() {
        Frame myFrame = new Frame("Date Window");
        myFrame.setLayout(new FlowLayout());
        myFrame.add(month);
        myFrame.add(day);
        myFrame.add(submit);
        submit.addActionListener(new ButtonListener());

        myFrame.addWindowListener(new WindowListener());        
        myFrame.setSize(200, 200);
        myFrame.setVisible(true);
    }
}

class WindowListener extends WindowAdapter {
    @Override
    public void windowClosing(WindowEvent e) {
        System.exit(0);
    }
}

class ButtonListener implements ActionListener  {
    public void actionPerformed(ActionEvent event) {
        if (event.getSource() == MainWindow.submit) {
            MainWindow.month.setText("12");
            MainWindow.day.setText("31");
        } 
    }
}

当我在没有任何参数的情况下初始化两个 Label 对象时,在单击提交按钮时,传递给 setText 方法的字符串“12”和“31”在屏幕上不可见,直到我单击窗口并拖动以调整其大小。我只在 Mac 上注意到了这一点。在 PC 上,字符串是可见的,但在我调整窗口大小之前是模糊的。但是,如果我像这样初始化标签:

    static Label month = new Label("0");
    static Label day = new Label("0");

在 Mac 上,字符串会按预期显示,但是在调整窗口大小之前它们会被遮挡。我错过了什么?

【问题讨论】:

    标签: java label settext


    【解决方案1】:

    here 提到的在 Frame 上调用 validate() 解决了问题。

    【讨论】:

      【解决方案2】:

      尝试重新绘制框架或/并设置足够的空间(setPreferredSize,setMininumSize)

      【讨论】:

        【解决方案3】:

        好吧,您的大部分帖子都已发布一年以上,所以我会为您提供怀疑的好处。我从不使用 AWT,所以我不知道问题是什么,但我会建议:

        1) 正确命名你的类。 “日期”已经是 JDK 中的一个类。选择一个更好的名字。

        2) 尝试使用 Swing 组件而不是 AWT。

        3) 从你的类中删除静态变量。

        4) 去掉 WindowListener 来关闭框架。

        您在此处发布的代码示例是 10-15 岁。尝试更新的东西。从Swing tutorial 开始获取更多最新示例。

        【讨论】:

        • 再一次让我感到惊讶的是,人们在没有添加评论的情况下对建议投了反对票。即使某些 cmets 没有直接回答发布的代码,我所说的一切都是建设性的。我总是推荐 Swing,因为有时人们甚至不知道 AWT 和 Swing 之间的区别。
        • 这不是一个有用的答案,因为它不能解决问题。更换框架并执行两次重构并不能解决问题。显然 WindowListener 是不相关的,因为它只处理关闭窗口。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-21
        • 2014-04-20
        • 2021-02-04
        相关资源
        最近更新 更多