java - 标签数组的最后一个标签定位错误

标签 java arrays swing label

我正在尝试使用 swing 在 Java 中创建一个二进制时钟。 我一开始就遇到了一个问题,标签数组的最后一个元素总是出现在 0 x 轴位置和 y 轴中间。

我不想使用任何布局管理器,因为我希望面板上有一些圆形图像。

这是我到目前为止的代码:

import javax.swing.*;

@SuppressWarnings("serial")
public class MainFrame extends JFrame {

public MainFrame()
{
    setLayout(null);
    JFrame frame = new JFrame("Binary Clock");
    frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
    frame.setVisible(true);
    frame.setSize(600,400);
    frame.setResizable(false);

    JLabel label[] = new JLabel[5];
    for(int i = 0; i < 5; i++)
    {
        label[i] = new JLabel();
        label[i].setLocation(i * 10, i * 10);
        label[i].setSize(30, 10);
        label[i].setText("TEST");
        frame.add(label[i]);
    }       
}

public static void main(String[] args)
{
    new MainFrame();
}
}

我在这里发现了类似的问题:

setLocation of Label

但是没有答案如何在没有布局管理器的情况下做到这一点。

我尝试过调整大小之类的东西,但只有 setText() 可以做任何改变,除此之外没有任何作用。

谢谢!

最佳答案

Pshemo 的答案提供了为什么添加最后一个标签后会出现奇怪行为的答案,但我也用一些增强功能标记了代码。

  1. 删除extends JFrame,这很少是一个好主意,并且您已经了解了为什么在 JFrame 的类中使用 JFrame 的实例可以原因...

  2. 将框架实例的布局设置为您原来的 null(而不是 this)。注意:使用布局管理器是创建 Swing UI 的首选方法,通常不鼓励将其设置为 null

  3. 您不需要标签数组(除非您打算稍后使用它们),您只需使用循环即可添加您想要的内容。

  4. 使框架最后可见

那么你有:

import javax.swing.*;

@SuppressWarnings("serial")
public class MainFrame {

    public MainFrame()
    {
        JFrame frame = new JFrame("Binary Clock");
        frame.setLayout(null);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(600,400);
        frame.setResizable(false);

        for(int i = 0; i < 5; i++)
        {
            JLabel label = new JLabel();
            label.setLocation(i * 10, i * 10);
            label.setSize(30, 10);
            label.setText("TEST");
            frame.add(label);
        }

        frame.setVisible(true);
    }

    public static void main(String[] args)
    {
        new MainFrame();
    }
}

关于java - 标签数组的最后一个标签定位错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28548112/

相关文章:

c++ - typedef int array[3] 和 typedef int(array)[3] 有什么区别?

java - 如何刷新 JTable 中的数据 我正在使用 TableModel

java - 在调用父类(super class)的构造函数之前执行初始化是不可能的吗?

java - 为什么我必须使用 in.nextLine();两次?

Java Ebean手动创建表

java - 显示我从类中获得的数组

java - JFrame setPreferredSize 导致屏幕尺寸稍大

arrays - 从没有列名的 Postgres 行构建 JSON

java - 如何以循环方式突出显示 TextArea 中的单词

Swing组件和jdk版本问题