1

JFrame誰かが私の新しいものを表示できるように更新する方法を知っていJButtonますか?

private void displayGrid()
{
   Case arrayGrid [][] = Grid.returnArray();

   for(int i = 0; i < Settings.returnYGrid(); i++)
    {
        for(int j = 0; j < Settings.returnXGrid(); j++)
        {
             Case caase = arrayGrid [i][j];
             panel.add(caase.getButton());
        }
}

を作成するときに使用する方法は次のとおりJFrameです。次に、一部が変更されて何も起こらないJFrameので、同じ方法で更新したいと思います...CasearrayGrid

設定しようとしましたがrevalidate()repaint()何もしませんでした。

4

1 に答える 1

3

revalidateメソッドの最後にandへの呼び出しを追加してみてくださいrepaint...

private void displayGrid()
{
   Case arrayGrid [][] = Grid.returnArray();

   for(int i = 0; i < Settings.returnYGrid(); i++)
    {
        for(int j = 0; j < Settings.returnXGrid(); j++)
        {
             Case caase = arrayGrid [i][j];
             panel.add(caase.getButton());
        }
    }
    panel.revalidate();
    panel.repaint();
}

実際の例で更新

public class TestFrame02 {

    public static void main(String[] args) {
        new TestFrame02();
    }

    public TestFrame02() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                }

                final JPanel panel = new JPanel(new GridLayout(0, 4));
                JButton update = new JButton("Update");
                update.addActionListener(new ActionListener() {
                    @Override
                    public void actionPerformed(ActionEvent e) {
                        for (int index = 0; index < 20; index++) {
                            panel.add(new JLabel(Integer.toString(index)));
                        }
                        panel.revalidate();
                        panel.repaint();
                    }
                });

                JFrame frame = new JFrame("Test");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setLayout(new BorderLayout());
                frame.add(panel);
                frame.add(update, BorderLayout.SOUTH);
                frame.setSize(100, 100);
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }

        });
    }

}
于 2013-02-05T10:12:01.563 に答える