【问题标题】:JLabel-Array create on Button pushJLabel-Array 在按钮推送上创建
【发布时间】:2015-04-06 16:19:27
【问题描述】:

我想在按钮按下时创建一个数组的 JLabel。我从未用数组做过什么,所以也许这是某种训练。我试过了,但它不起作用。预期结果:每次我按下按钮时,都会创建 20 个 JLabel 之一。 这是我的课:

public class JLabelArray {

static JFrame frame;

static JButton button;

public static void main(String[] args) {

    final JLabel[] label = new JLabel[20];

    //
    button = new JButton("push me");
    button.setBounds(0, 0, 100, 30);
    button.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            // This is where a new JLabel should be created
            for (int i = 0; i < label.length; i++) {
                label[i] = new JLabel("Label" + i);
                label[i].setBounds(button.getX(), button.getY()+ 10 + i * 15, 50, 50);
                frame.add(label[i]);
                frame.revalidate();
                frame.repaint();
            }
        }
    });
    //

    frame = new JFrame();
    frame.setSize(500, 500);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setLayout(null);
    frame.setVisible(true);
    frame.add(button);

}

}

编辑:更新代码
EDIT2:更新了 for 循环
EDIT3:我修改了整个问题

【问题讨论】:

  • 添加标签后,您需要validate()您的容器。来自documentation:“布局相关的变化,比如设置组件的边界,或者将组件添加到容器中,自动使容器失效

标签: java arrays swing jbutton jlabel


【解决方案1】:

在验证父容器后添加组件时,您应该重新验证/重新绘制 - 这不仅包括添加 JButton(在将 JFrame 设置为可见之前添加),还包括添加 JLabels

            frame.add(label[i]);
            frame.revalidate();
            frame.repaint();

我还建议不要使用空布局,而是选择适当的 LayoutManager:请参阅 https://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html 。如果您希望继续使用空布局,则应将添加的标签设置为不同的位置,否则它们将相互重叠。

【讨论】:

  • 喜欢这个? label[i].setBounds(button.getX(), button.getY() + i * 15, 50, 50);
  • “不工作”没有意义。您的意思是 JLabels 仍然不可见吗?对我有用(除了重叠部分,参考您上面的第一条评论:您尝试过吗?)
  • 它们仍然不可见。
  • 我看不到你的电脑屏幕——你应该用你正在编译的当前源代码版本更新你的代码。
  • 我很笨。 for 循环中的错误参数。但还是没有结果,我想要
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-12
  • 1970-01-01
  • 2017-09-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多