2013-02-05 53 views
1

没有人知道如何刷新我的JFrame,所以我可以显示我的新JButton我的JFrame不刷新

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()并没有什么任。

回答

3

尝试增加以revalidaterepaint在方法的最后一个电话......

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); 
      } 

     }); 
    } 

} 
+0

嗨,感谢回答我的问题,但偏偏我更新已经尝试过这种方式,但仍然无法正常工作... –

+0

您是否使用布局管理器? – MadProgrammer

+0

@BenjaminClanet我添加了一个工作示例,问题必须是在您的代码中,您需要提供一个工作示例来演示您可以编译和运行的问题。尝试取出'panel.revalidate'和'panel.repaint'调用以查看差异 – MadProgrammer