2014-05-22 33 views
-2

在我的框架中我有一個標題屏幕(J面板),當我點擊一個按鈕,我希望它被替換爲遊戲屏幕(另一個J面板)。我有這個代碼來取代它,但是當我點擊按鈕將它發送到我的啓動方法它清除GUI,它只是保持空白。試圖喲更新我的JFrame

public void start() { 
     frame.remove(titlePanel); 
     frame.repaint(); 
     frame.add(gamePanel); 
} 

如果我添加的GamePanel的地方,我做到了正常工作的titlePanel框架,所以我知道它是找到圖像。

任何幫助將不勝感激。

回答

1

首選的解決方案是使用CardLayout,這將讓你輕鬆切換出意見...

直接的方法(你現在正在做的),應通過調用frame.revalidate()您添加後確定gamePanel ...但我仍然推薦CardLayout

1

您必須使用frame.revalidate()才能使更改正常工作。

0

試試這個:

import java.awt.BorderLayout; 
import java.awt.Color; 
import java.awt.EventQueue; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.border.EmptyBorder; 
import javax.swing.JButton; 
public class test extends JFrame { 
    private JPanel contentPane; 
    JPanel panel1; 
    JPanel panel2; 
    public static void main(String[] args) { 
     EventQueue.invokeLater(new Runnable() { 
      public void run() { 
       try { 
        test frame = new test(); 
        frame.setVisible(true); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
      } 
     }); 
    } 
    public test() { 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setBounds(100, 100, 450, 300); 
     contentPane = new JPanel(); 
     contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); 
     contentPane.setLayout(new BorderLayout(0, 0)); 
     setContentPane(contentPane); 

     panel1 = new JPanel(); 
     contentPane.add(panel1, BorderLayout.NORTH); 
     panel1.setBackground(Color.red); 

     panel2 = new JPanel(); 
     panel2.setBackground(Color.blue); 

     JButton btnNewButton = new JButton("New button"); 
     contentPane.add(btnNewButton, BorderLayout.SOUTH); 
     btnNewButton.addActionListener(new ActionListener() { 

      @Override 
      public void actionPerformed(ActionEvent e) { 
       remove(panel1); 
       contentPane.add(panel2, BorderLayout.NORTH); 
       repaint(); 
       validate(); 
      } 
     }); 
    } 

}