0

ボタンが押されたときに他のクラスのフレームを setvisible(false) にしたいです。

DisplayScore というクラスがあり、このクラスは getContentPane().add(new ScoreInfo()); を取得します。ScoreInfo クラスから。2 つのクラスに分割する理由は、DisplayScore が JFrame を拡張し、ScoreInfo が JPanel を拡張するためです。ともかく

ボタンが押されたときにScoreInfoで他のフレームを呼び出してDisplayScoreフレームを閉じたい。this.setVisible(false); を実行すると、Panel だけが消え、DisplayScore() で作成されたフレームが残ります。

だから..私の質問は、ScoreInfoクラスからそれをどのように処理するのですか? お尻の部分をチェック。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);

    }
}

}

4

2 に答える 2

1

これは機能するはずです:

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

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

JFrameただし、親が実際に(MadProgrammerがコメントしたように、これはcontentPaneになるため、これは機能しません)であるかどうかがわからないため、それほど堅牢ではありません。より良いアプローチはJFrame、コンストラクターでを要求し、それを必然的に非表示にすることです。

于 2012-12-02T09:43:18.220 に答える
1

あなたは出来る:

  • 親フレームの参照をパネルに渡します。これは少し汚いと思いますが、それは私だけです。
  • SwingUtilities.getWindowAncestor(Component)現在のコンポーネントの親ウィンドウを検索するために使用します。その後、それを呼び出すことができますsetVisible
于 2012-12-02T09:43:42.713 に答える