如何在for循环中添加JButton?

时间:2019-06-21 06:31:33

标签: java jbutton minecraft

因此,我在minecraft插件中制作了一个UI,它为每个玩家添加了一个按钮,当我们单击该按钮时,它将踢玩家。 这是for循环:

for (final Player p : Bukkit.getOnlinePlayers())
    {
        System.out.println("Looping.");
        final JButton b = new JButton();
        b.setName(p.getName());
        b.setText(p.getName());
        b.setToolTipText("Kick " + b.getText());
        b.setBackground(Color.GREEN);
        b.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                if (!b.getBackground().equals(Color.RED))
                {
                        Bukkit.getScheduler().runTask(main, new Runnable() {
                            public void run() {
                                Bukkit.getPlayer(b.getText()).kickPlayer(jtf.getText());
                            b.setBackground(Color.RED);
                            }
                        });
                }

            }
        });
        System.out.println("Button added.");
        f.add(b);
    }

我们假设服务器中有2个播放器,分别是 asd dsa 。运行此for循环时,它只会添加 asd 的按钮,但会打印两次已添加按钮(和循环)。

f 公共静态JFrame ,而 jtf 公共静态JTextField

所以...为什么不起作用?

1 个答案:

答案 0 :(得分:1)

发生这种情况是因为LayoutManagerBorderLayout,因此方法add(JComponent comp)JComponent放在JFrame的中心,而{{ 1}}填充了整个JComponent。 使用方法JFrame,它将f.setLayout(new GridLayout(number_of_players, 1));分成几行作为您的玩家数,因此可以显示JFrmae的倍数。