GUI未显示,Java(BlueJ)
创建一个Tic-Tac-Toe游戏。到目前为止,这些按钮没有任何用途,游戏根本不应该运行。我所要做的就是为游戏设置GUI,有时我运行它时会显示GUI,但大多数时候从未显示。我对GUI for Java相当陌生,所以任何信息都会很有帮助 ****编辑:算出了!在我创建了所有按钮之后,我不得不执行GUI未显示,Java(BlueJ),java,user-interface,bluej,Java,User Interface,Bluej,创建一个Tic-Tac-Toe游戏。到目前为止,这些按钮没有任何用途,游戏根本不应该运行。我所要做的就是为游戏设置GUI,有时我运行它时会显示GUI,但大多数时候从未显示。我对GUI for Java相当陌生,所以任何信息都会很有帮助 ****编辑:算出了!在我创建了所有按钮之后,我不得不执行frame.setVisible(true),似乎可以修复它 import javax.swing.*; import java.awt.*; import java.awt.event.*; import
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)
{
}
}
}
import javax.swing.*;
导入java.awt.*;
导入java.awt.event.*;
导入java.util.*;
导入javax.swing.JOptionPane;
/**
*一个类在一个非常复杂的环境中模拟一个tic-tac-toe(零和十字架,Xs和Os)游戏
*简单的GUI窗口。
*
*@作者托马斯·布雷克
*@版本2016年12月4日
*/
公共类TicTacToe扩展JFrame
{
私有JFrame;
专用JButton[]]按钮;
私人杰门努巴·梅努巴;
私有菜单项菜单新建、菜单退出;
私人标签;
私人JOptionPane;
/**
*构建一个新的Tic-Tac趾板并设置基本
*JFrame在JScrollPane GUI中包含JTextArea。
*/
公共交通
{
超级();
框架=新的JFrame(“Tic Tac Toe”);
JMenu菜单=新JMenu(“游戏”);
label=新的JLabel();
menuBar=newjmenubar();
菜单栏。添加(菜单);
menuNew=新项目(“新”);
menuNew.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N,ActionEvent.CTRL_MASK));
menuNew.getAccessibleContext().setAccessibleDescription(“创建一个新的井字游戏”);
menuQuit=新JMenuItem(“退出”);
menuQuit.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Q,ActionEvent.CTRL_MASK));
menuQuit.getAccessibleContext().setAccessibleDescription(“退出井字游戏”);
菜单。添加(菜单新建);
菜单.添加(菜单退出);
frame.setJMenuBar(菜单栏);
框架。添加(标签);
框架=新的JFrame(“Tic Tac Toe”);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
框架。设置尺寸(350355);
frame.setresizeable(false);
frame.setLocationRelativeTo(空);
frame.setVisible(true);
按钮=新的JButton[3][3];
}
私有无效设置()
{
JPanel游戏=新JPanel(新网格布局(3,3));
JPanel panel=newjpanel(newborderlayout());
框架。添加(面板);
game.setVisible(true);
面板设置可见(真);
game.setPreferredSize(新维度(300300));
面板。设置首选尺寸(新尺寸(325425));
panel.add(游戏、边界布局、中心);
对于(int i=0;i<3;i++)
{
对于(int j=0;j<3;j++)
{
按钮[i][j]=新的JButton();
按钮[i][j].setText(“”);
按钮[i][j]。设置可见(真);
添加(按钮[i][j]);
按钮[i][j].addActionListener(新按钮Listener());
}
}
}
公共静态void main(字符串[]args){
TicTacToe mainGame=新的TicTacToe();
mainGame.setUp();
}
私有类ButtonListener实现ActionListener
{
已执行的公共无效操作(操作事件ev)
{
}
}
}
通常,在swing中,您首先创建一个JFrame
,然后创建一个JPanel
或更多(如果需要)。
此外,您可以为每个面板设置LayoutManager
您绝对不需要设置按钮[i][j].setVisible(true)代码>或任何类似的手动操作。您只需在面板或框架上设置Visisible(true),它将自动设置连接到该面板/框架的每个组件的所有内容
同时去掉frame.setLocationRelativeTo(null)代码>现在
还有一件事是一个相当好的实践——首先设置组件所需的一切,然后再将其添加到面板或框架中
除此之外,我真的不知道为什么它有时会出现,有时不会出现。谢谢你的信息!我已经改变了你告诉我的所有事情,尽管我仍然不明白为什么我的按钮不会出现(可能是整个面板?)。有什么想法吗?我看你明白了。是的,我没注意到你的镜框是可见的。通常情况下,您会将可见性设置为设置完所有内容后的最后一件事。真为你高兴。插入新答案,而不是编辑帖子。也许它会帮助别人。