Java 按下按钮时,使其他类框架设置可见(false)
我想在按下按钮时使其他类框架设置可见(false) 有一个名为DisplayScore的类,该类获取getContentPane().add(new ScoreInfo());来自ScoreInfo类。 分成两个类的原因是DisplayScore扩展了JFrame,ScoreInfo扩展了JPanel。 反正 在ScoreInfo中,当按下按钮时,我想调出其他帧并关闭DisplayScore帧。如果我这样做。setVisible(false);,只有面板消失,由DisplayScore()制作的框架保留下来 所以..我的问题是如何从ScoreInfo类处理它? 检查按钮部分。操作执行方法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()制作的
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
JDialog
或JOptionPane
完成。3) “因为DisplayScore扩展了JFrame…”不要扩展框架。“.和ScoreInfo扩展JPanel.”或面板。相反,只需创建一个并向其中添加内容。getParent
很可能是JFrame
(或JDialog
)的内容窗格