因此,我在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 )
所以...为什么不起作用?
答案 0 :(得分:1)
发生这种情况是因为LayoutManager
是BorderLayout
,因此方法add(JComponent comp)
将JComponent
放在JFrame
的中心,而{{ 1}}填充了整个JComponent
。
使用方法JFrame
,它将f.setLayout(new GridLayout(number_of_players, 1));
分成几行作为您的玩家数,因此可以显示JFrmae
的倍数。