1

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() を使用してみましたが、画像は変わりません。他に何を試す必要がありますか?

4

1 に答える 1

2

で新しいJlabelを作成していますActionListenerが、コンテナには追加していません。setIconIconを使用して更新できます

pic.setIcon(now);

いくつかの補足事項:

  • Iconsで使用するために削除しているJLabelと、最終的には使用可能なアイコンがなくなり、IndexOutOfBoundsException再度追加されない場合に発生します。
  • 一般に、AWT と Swing コンポーネントを混在させることはお勧めできません。古い AWT コンポーネントは通常、コンポーネントのz オーダーを尊重せず、多くの場合、軽量の隣接コンポーネントを隠します。ここを参照してください。
于 2013-03-24T01:58:41.690 に答える