【问题标题】:Updating a JLabel Icon更新 JLabel 图标
【发布时间】:2013-03-23 20:45:42
【问题描述】:

我是创建 GUI 的新手,在刷新 JLabel 上的图像时遇到问题。我读过有同样问题的人提出的其他问题,但没有一个答案对我有帮助。我有一个程序,每次单击 JButton 时都会掷骰子,如果结果是一个,我希望 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(),正如在类似问题中所建议的那样,但图片没有改变。我还应该尝试什么?

【问题讨论】:

    标签: java swing icons actionlistener jlabel


    【解决方案1】:

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

    pic.setIcon(now);
    

    一些旁注:

    • 当您删除 Icons 以在您的 JLabel 中使用时,如果不重新添加,您最终将用完可用的图标,从而导致 IndexOutOfBoundsException
    • 通常混合 AWT 和 Swing 组件不是一个好主意。较旧的 AWT 组件通常不尊重组件的 z-order 并且经常隐藏它们的轻量级邻居。见here

    【讨论】:

    • +1,周日早上 nitpick:从技术上讲,现在混音还不错 - 但大多数时候并不是真正的意图:-)
    猜你喜欢
    • 2012-05-13
    • 2013-01-18
    • 2013-07-03
    • 2013-05-17
    • 1970-01-01
    • 2020-06-26
    • 1970-01-01
    • 1970-01-01
    • 2012-06-22
    相关资源
    最近更新 更多