2012-12-02 76 views
0

當按下按鈕時,我想讓其他類框架設置爲可見(false)。有一個名爲DisplayScore的類,此類獲取getContentPane()。add(new ScoreInfo());來自ScoreInfo類。 由於DisplayScore擴展了JFrame而ScoreInfo擴展了JPanel,所以分成兩個類的原因。 無論如何當按鈕按下時使其他類框架設置爲可見(false)

在ScoreInfo按鈕被按下時我想調用其他框架並關閉DisplayScore框架。如果我這樣做.setVisible(false),則只有面板消失,並且由DisplayScore()製作的幀保留。

所以..我的問題是如何從ScoreInfo類處理? 查看buttom部分。 actionPerformed方法。

public class ScoreInfo extends JPanel implements ActionListener 
{ 
     JButton btnBack; 

public ScoreInfo() 
{ 


    JTextArea ta = new JTextArea(); 
    ta.setForeground(Color.white); 
    ta.setFont(new Font("Serif", Font.ITALIC+Font.BOLD, 16)); 
    ta.setBackground(Color.darkGray); 

    try 
    { 
     ta.read(new FileReader("data/scores4.txt"),null); 
    } 
    catch(IOException ioe) 
    { 
     System.out.print("ERROR: Could not read file \""); 
    } 


    btnBack = new JButton("MAIN"); 
    btnBack.setSize(10,10); 
    btnBack.setBackground(Color.darkGray); 
    btnBack.setFont(new Font("Courier New", Font.ITALIC+Font.BOLD, 15)); 
    btnBack.setForeground(Color.black); 

    JPanel score = new JPanel(); 
    score.setLayout(new BorderLayout()); 
    JButton btnScore = new JButton("H I G H S C O R E"); 
    btnScore.setBackground(Color.BLACK); 
    btnScore.setFont(new Font("Courier New", Font.ITALIC+Font.BOLD, 48)); 
    btnScore.setForeground(Color.white); 

    JLabel score_tab = new JLabel(" N A M E " + " S C O R E " + " C O M B O "); 
    score_tab.setFont(new Font("Courier New", Font.ITALIC+Font.BOLD, 35)); 


    score.add(btnBack, BorderLayout.WEST); 
    score.add(btnScore, BorderLayout.CENTER); 
    score.add(score_tab, BorderLayout.SOUTH); 

    JPanel panel = new JPanel(); 
    panel.setBackground(Color.darkGray); 
    panel.setPreferredSize(new Dimension(800, 380)); 
    panel.setLayout(new BorderLayout()); 
    panel.add(score, BorderLayout.NORTH); 
    //panel.add(backpnl, BorderLayout.WEST); 
    panel.add(ta, BorderLayout.CENTER); 

    add(panel, score); 

    btnBack.addActionListener(this); 

    } 

public void actionPerformed(ActionEvent evt){ 
    if(evt.getSource()==btnBack){ 

     //want to make DisplayScore.setVisible(false); 
     //this.setVisible(false); 
     MainFrame mf = new MainFrame(); 
     mf.pack(); 
     mf.setSize(640,480); 
     mf.setLocation(400,0); 
     mf.setResizable(false); 
     mf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     mf.setVisible(true); 

    } 
} 

}

+1

1)請參閱[使用多個JFrames,好/壞實踐?](http://stackoverflow.com/a/9554657/418556)2)彈出式GUI可能最好做爲' JDialog'或'JOptionPane'。 3)*「因爲DisplayScore擴展了JFrame ..」*不擴展幀。 *「..和ScoreInfo擴展JPanel」* ..或面板。相反,只需創建一個並添加內容即可。 –

回答

1

這應該工作:

if(evt.getSource()==btnBack){ 

    getParent.setVisible(false); 
    MainFrame mf = new MainFrame(); 

但也不算強勁,因爲你可以不知道,如果父母實際上是JFrame(和MadProgrammer評論說,這將成爲contentPane,所以這不起作用)。更好的方法是在構造函數中請求JFrame,並將其隱藏起來。

+1

'getParent'很可能是'JFrame'(或'JDialog')的內容窗格 – MadProgrammer

相關問題