java - JLabel 绘制点

标签 java swing jlabel

import java.awt.Graphics;
import javax.swing.*;

public class Demo
{
    JFrame jf;
    JLabel[] labels;
    JPanel panel;

    public Demo()
    {
        jf = new JFrame();
        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        labels = new JLabel[10];
        Box vbox = Box.createVerticalBox();
        for (int i = 0; i < 10; i++)
        {
            labels[i] = new JLabel();
            vbox.add(labels[i]);
        }
        panel = new JPanel();
        panel.add(vbox);
        jf.add(panel);
        jf.setSize(300, 250);
        jf.setVisible(true);
    }
    public static void main(String[] args)
    {
        SwingUtilities.invokeLater(new DemoRunnable());
    }
    public void updateState()
    {
        for (JLabel l : labels)
        {
            if (Math.random() > 0.5)
                l.setText("777777777777777777777777777777777777");
            else
                l.setText("10000000000000000000000000000000000000");
        }
    }
}
class DemoRunnable implements Runnable
{
    Demo demo;

    DemoRunnable()
    {
        this.demo = new Demo();
    }
    @Override
    public void run()
    {
        Thread t = new Thread(new Runnable()
        {

            @Override
            public void run()
            {
                while (true)
                {
                    try
                    {
                        Thread.sleep(0);
                    }
                    catch (InterruptedException e)
                    {
                        e.printStackTrace();
                    }
                    demo.updateState();
                }
            }
        });
        t.start();

    }
}

我在执行这个程序时看到了这样的效果。是否可以消除它(必须用零代替点)?

enter image description here

最佳答案

使用 pack() 代替 setSize() 来利用组件精心计算的首选大小。您还需要初始化标签:

labels[i] = new JLabel("10000000000000000000000000000000000000");

同时考虑 javax.swing.Timer而不是单独的线程。

附录:方便的是,每个 Swing Timer 共享一个公共(public)后台线程,actionPerformed() 在事件调度线程上调用。另一种选择是 SwingWorker,如图 here .

关于java - JLabel 绘制点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9862861/

相关文章:

java - Eclipse 重命名参与者偏移量处理

java - 通过平均方法传递数组,导致百分比较低

java - 调用重绘时 JTable 不重绘

java - 如何在 jlabel 之间留空格?

java - 控制台的 readLine() 中的 NullPointerException

java - 将每个以相同字符开头的键映射到单词列表

java - 如何获取 JTree 文件树中的节点以知道它是哪个文件?

java - 无法设置面板的背景颜色

java - 在JLabel中添加图像但不响应

java - 在 GUI 中显示时间