【问题标题】:GUI not showing up, Java (BlueJ)GUI 未显示,Java (BlueJ)
【发布时间】:2017-04-22 21:05:51
【问题描述】:

创建井字游戏。截至目前,按钮没有任何用途,游戏根本不应该运行。我要做的就是为游戏设置 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) 
        {

        }
    }
}

【问题讨论】:

    标签: java user-interface bluej


    【解决方案1】:

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

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

    现在也摆脱frame.setLocationRelativeTo(null);

    还有一件事是一种相当好的做法——首先设置组件所需的一切,然后再将其添加到面板或框架中。

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

    【讨论】:

    • 感谢您的信息!我已经更改了您告诉我的所有内容,但我仍然没有弄清楚为什么我的按钮不会显示(可能是整个面板?)。有什么想法吗?
    • 我看到你想通了。是的,我没有注意到您的框架集可见。通常,您在设置完所有内容后将可见性设置为最后一件事。对你有益。不要编辑帖子,而是插入一个新答案。也许它会帮助别人。
    猜你喜欢
    • 2020-01-17
    • 1970-01-01
    • 2022-07-12
    • 2023-03-31
    • 2014-01-24
    • 2014-03-21
    • 2013-12-27
    • 2012-08-27
    • 1970-01-01
    相关资源
    最近更新 更多