gpt4 book ai didi

java - 更新 JLabel 图标

转载 作者:行者123 更新时间:2023-11-30 04:27:10 24 4
gpt4 key购买 nike

我是创建 GUI 的新手,并且在刷新 JLabel 上的图像时遇到问题。我读过有同样问题的人提出的其他问题,但没有一个答案对我有帮助。我有一个程序,每次单击 JButton 时都会掷骰子,如果结果是 1,则我希望 JLabel 的图像发生变化。这是我的 GUI 类的构造函数:

private Panel panel;
private Label label;
private TextField text;
private JButton roll;
private ArrayList<ImageIcon> deck;
private ArrayList<ImageIcon> discard;
private JLabel pic;
private JFrame f;
private ImageIcon now;
public Planechase()
{
f = new JFrame("Planechase");
deck = new ArrayList<ImageIcon>();
populate();
Collections.shuffle(deck);
discard = new ArrayList<ImageIcon>();
label = new Label("Planechase");
text = new TextField(":)",8);
text.setEditable(false);
roll = new JButton("Roll");
roll.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent e)
{
int i = (int)(Math.random()*6)+1;
System.out.println(i);
if(i==1)
{
text.setText("Planeswalk");
discard.add(now);
now = deck.remove(0);
pic = new JLabel(now);
pic.updateUI();
}
else if(i==6)
{
text.setText("Chaos");
}
else
{
text.setText("Blank");
}
}
});
now = deck.remove(0);
pic = new JLabel(now);
f.getContentPane().setLayout(new FlowLayout());
f.getContentPane().add(pic);
f.getContentPane().add(text);
f.getContentPane().add(roll);
}

我尝试使用上面的 updateUI() ,正如类似问题中所建议的那样,但图片没有改变。我还应该尝试什么?

最佳答案

您正在 ActionListener 中创建一个新的 Jlabel,但未将其添加到容器中。您可以使用 setIcon 更新图标

pic.setIcon(now);
<小时/>

一些旁注:

  • 当您删除要在 JLabel 中使用的 Icons 时,如果出现以下情况,您最终将用完可用的图标,从而导致 IndexOutOfBoundsException未重新添加。
  • 通常混合使用 AWT 和 Swing 组件并不是一个好主意。较旧的 AWT 组件通常不尊重组件的 z 顺序,并且经常隐藏其轻量级邻居。请参阅here .

关于java - 更新 JLabel 图标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15591853/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com