Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 按下按钮时,使其他类框架设置可见(false)_Java_Swing_Jframe_Jpanel - Fatal编程技术网

Java 按下按钮时,使其他类框架设置可见(false)

Java 按下按钮时,使其他类框架设置可见(false),java,swing,jframe,jpanel,Java,Swing,Jframe,Jpanel,我想在按下按钮时使其他类框架设置可见(false) 有一个名为DisplayScore的类,该类获取getContentPane().add(new ScoreInfo());来自ScoreInfo类。 分成两个类的原因是DisplayScore扩展了JFrame,ScoreInfo扩展了JPanel。 反正 在ScoreInfo中,当按下按钮时,我想调出其他帧并关闭DisplayScore帧。如果我这样做。setVisible(false);,只有面板消失,由DisplayScore()制作的

我想在按下按钮时使其他类框架设置可见(false)

有一个名为DisplayScore的类,该类获取getContentPane().add(new ScoreInfo());来自ScoreInfo类。 分成两个类的原因是DisplayScore扩展了JFrame,ScoreInfo扩展了JPanel。 反正

在ScoreInfo中,当按下按钮时,我想调出其他帧并关闭DisplayScore帧。如果我这样做。setVisible(false);,只有面板消失,由DisplayScore()制作的框架保留下来

所以..我的问题是如何从ScoreInfo类处理它? 检查按钮部分。操作执行方法

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

    }
}
}

这应该可以:

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

    getParent.setVisible(false);
    MainFrame mf = new MainFrame();
但是不是太健壮,因为您不知道父对象是否实际上是
JFrame
(正如MadProgrammer所评论的,这将是contentPane,所以这不起作用)。更好的方法是在构造函数中请求
JFrame
,并将其隐藏起来

你可以:

  • 将父框架的参照传递到配电盘。我觉得这有点脏,但那只是我
  • 用于查找当前组件的父窗口。然后可以在其上调用
    setVisible

1)请参见2)弹出式GUI最好作为
JDialog
JOptionPane
完成。3) “因为DisplayScore扩展了JFrame…”不要扩展框架。“.和ScoreInfo扩展JPanel.”或面板。相反,只需创建一个并向其中添加内容。
getParent
很可能是
JFrame
(或
JDialog
)的内容窗格