gpt4 book ai didi

java - GUI 未显示,Java (BlueJ)

转载 作者:行者123 更新时间:2023-12-05 07:46:13 24 4
gpt4 key购买 nike

创建井字游戏。截至目前,按钮没有任何作用,游戏根本无法运行。我想要做的就是为游戏设置 GUI,它有时会在我运行它时出现,但大多数时候从未出现过。我对 Java 的 GUI 很陌生,所以任何信息都会有所帮助!

****编辑:想通了!我必须在创建所有按钮后执行 frame.setVisible(true) 操作,似乎可以解决问题。

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.JOptionPane;

/**
* A class modelling a tic-tac-toe (noughts and crosses, Xs and Os) game in a very
* simple GUI window.
*
* @author Thomas Bryk
* @version December 4, 2016
*/

public class TicTacToe extends JFrame
{
private JFrame frame;
private JButton[][] buttons;
private JMenuBar menuBar;
private JMenuItem menuNew, menuQuit;
private JLabel label;
private JOptionPane pane;

/**
* Constructs a new Tic-Tac-Toe board and sets up the basic
* JFrame containing a JTextArea in a JScrollPane GUI.
*/
public TicTacToe()
{
super();
frame=new JFrame("Tic Tac Toe");
JMenu menu=new JMenu("Game");
label=new JLabel();

menuBar= new JMenuBar();
menuBar.add(menu);

menuNew= new JMenuItem("New");
menuNew.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N,ActionEvent.CTRL_MASK));
menuNew.getAccessibleContext().setAccessibleDescription("Creates a new game of Tic Tac Toe");

menuQuit= new JMenuItem("Quit");
menuQuit.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Q,ActionEvent.CTRL_MASK));
menuQuit.getAccessibleContext().setAccessibleDescription("Quits the game of Tic Tac Toe");

menu.add(menuNew);
menu.add(menuQuit);

frame.setJMenuBar(menuBar);
frame.add(label);
frame=new JFrame("Tic Tac Toe");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(350,355);
frame.setResizable(false);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
buttons=new JButton[3][3];
}

private void setUp()
{
JPanel game = new JPanel(new GridLayout(3,3));
JPanel panel = new JPanel(new BorderLayout());
frame.add(panel);
game.setVisible(true);
panel.setVisible(true);
game.setPreferredSize(new Dimension(300,300));
panel.setPreferredSize(new Dimension(325,425));
panel.add(game, BorderLayout.CENTER);

for(int i = 0; i < 3; i++)
{
for(int j = 0; j < 3; j++)
{
buttons[i][j] = new JButton();
buttons[i][j].setText("");
buttons[i][j].setVisible(true);
game.add(buttons[i][j]);
buttons[i][j].addActionListener(new ButtonListener());
}
}
}

public static void main (String[] args){
TicTacToe mainGame=new TicTacToe();
mainGame.setUp();
}

private class ButtonListener implements ActionListener
{
public void actionPerformed(ActionEvent ev)
{

}
}
}

最佳答案

通常在 swing 中,您首先创建一个 JFrame,然后创建一个 JPanel,如果需要的话,还可以创建更多。此外,您可以为每个面板设置 LayoutManager

您绝对不需要设置 buttons[i][j].setVisible(true); 或任何类似的手动设置。您只需在 Panel 或 Frame 上设置 Visisible(true) ,它就会自动为附加到该面板/框架的每个组件设置所有内容。

现在也去掉 frame.setLocationRelativeTo(null);

还有一件事是一个很好的做法 - 在将组件添加到面板或框架之前,首先设置组件所需的一切。

除此之外,我真的不知道为什么它有时会出现而有时却不会。

关于java - GUI 未显示,Java (BlueJ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41025636/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com