刚刚开始使用GUI,我真的对这段代码感到困惑,出于某种原因,当我设置默认关闭操作时,它不起作用,并且在添加JLabel和TextField等组件时也是如此。我用JFrame扩展了我的类,我的程序中没有其他同名的JFrame或JPanel。哦,而且,setVisible和setSize仍然有效,它只是在添加组件或设置关闭操作时。这是调用包含makeWindow()调用方法的类。
public static class Play implements ActionListener{
public void actionPerformed(ActionEvent e){
frame.setVisible(false);
game.playGame();
}
这是实际的方法:
private void makeWindow() {
JFrame window = new JFrame("Battleships 2.0");
JPanel canvas = new JPanel();
JLabel title = new JLabel("Battleships 2.0");
title.setFont(font);
JTextField userCoordinates = new JTextField();
window.setSize(500,500);
window.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
window.setResizable(false);
window.setVisible(true);
canvas.setLayout(new BoxLayout(canvas, BoxLayout.Y_AXIS));
window.add(canvas);
canvas.add(title);
canvas.add(userCoordinates);
}
答案 0 :(得分:3)
如果您在类中扩展了JFrame,那么您不需要在方法中再次创建JFrame对象。您使用了BOXLayout,因此您的文本字段占据整个面板,标签显示在顶部。 我刚刚修改了你的代码以使用FlowLayout,并且控件清晰可见。 检查一下:
private void makeWindow() {
// JFrame window = new JFrame("Battleships 2.0");
setTitle("Battleships 2.0");
JPanel canvas = new JPanel();
JLabel title = new JLabel("Battleships 2.0");
// title.setFont(font);
JTextField userCoordinates = new JTextField(10);
setSize(500, 500);
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
setResizable(false);
setVisible(true);
canvas.setLayout(new FlowLayout());
add(canvas);
canvas.add(title);
canvas.add(userCoordinates);
}