我有一个JFrame和两个JPanel。其中第一个有“继续”按钮,第二个有“返回”按钮。程序启动时,第一个面板将添加到框架中。当我按下“继续”按钮时,我想要更换面板 - 与“返回”相同。
public class Main extends JFrame {
private final int width = 320;
private final int height = 640;
private JPanel firstPanel;
private JPanel secondPanel;
private JButton goOn;
private JButton goBack;
public Main() {
firstPanel = new JPanel();
firstPanel.setBackground(Color.yellow);
firstPanel.setOpaque(true);
firstPanel.setPreferredSize(new Dimension(width, height));
goOn = new JButton("Go on");
goOn.setPreferredSize(new Dimension(width/2, height/2));
firstPanel.add(goOn);
secondPanel = new JPanel();
secondPanel.setBackground(Color.green);
secondPanel.setOpaque(true);
secondPanel.setPreferredSize(new Dimension(width, height));
goBack = new JButton("Go back");
goBack.setPreferredSize(new Dimension(width/2, height/2));
secondPanel.add(goBack);
showFirstPanel();
setResizable(false);
pack();
setLocationRelativeTo(null);
setVisible(true);
addButtonsListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (e.getActionCommand().equals("Go on"))
showSecondPanel();
else
showFirstPanel();
}
});
}
public void showFirstPanel() {
remove(secondPanel);
add(firstPanel);
}
public void showSecondPanel() {
remove(firstPanel);
add(secondPanel);
}
public void addButtonsListener(ActionListener listener) {
goOn.addActionListener(listener);
goBack.addActionListener(listener);
}
public static void main (String[] args) {
new Main();
}
}
问题是当我按下第一个按钮时,程序挂起。有时它会在10-20秒后起作用。 “返回”按钮也会出现同样的情况。
答案 0 :(得分:0)
我建议你忘掉remove()并用setVisible()替换它 所以你的代码将是
public class Main extends JFrame {
private final int width = 320;
private final int height = 640;
private JPanel firstPanel;
private JPanel secondPanel;
private JButton goOn;
private JButton goBack;
public Main() {
firstPanel = new JPanel();
firstPanel.setBackground(Color.yellow);
firstPanel.setOpaque(true);
firstPanel.setPreferredSize(new Dimension(width, height));
goOn = new JButton("Go on");
goOn.setPreferredSize(new Dimension(width/2, height/2));
firstPanel.add(goOn);
secondPanel = new JPanel();
secondPanel.setBackground(Color.green);
secondPanel.setOpaque(true);
secondPanel.setPreferredSize(new Dimension(width, height));
goBack = new JButton("Go back");
goBack.setPreferredSize(new Dimension(width/2, height/2));
secondPanel.add(goBack);
add(firstPanel);
add(secondPanel);
showFirstPanel();
setResizable(false);
pack();
setLocationRelativeTo(null);
setVisible(true);
addButtonsListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (e.getActionCommand().equals("Go on"))
showSecondPanel();
else
showFirstPanel();
}
});
}
public void showFirstPanel() {
secondPanel.setVisible(false);
firstPanel.setVisible(true);
}
public void showSecondPanel() {
firstPanel.setVisible(false);
secondPanel.setVisible(false);
}
public void addButtonsListener(ActionListener listener) {
goOn.addActionListener(listener);
goBack.addActionListener(listener);
}
public static void main (String[] args) {
new Main();
}
}