0

私の初心者 Java クラスでは、自動化された Tic-Tac-Toe ゲームを作成しました。現在、それをプレイするための GUI を作成しています。ただし、間隔/マージンを正しく設定するのに苦労しています。これまでのところ、GUI の一般的なフレームワークを取得しようとしてきました。その後、戻って、既に作成した Tic-Tac-Toe ゲームを実際に実装します。だから、これまでのところ、私はこれを持っています:

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

import javax.swing.border.*;

public class ITTTGUI extends JFrame implements ActionListener{

    //butimport javax.swing.border.*;tons
    private JPanel sizePanel;
    private JPanel buttonPanel;
    private JPanel displayPanel;
    private JPanel bottomPanel;
    private JTextField size;
    private JButton rebuildButton;
    private JButton[] buttons;
    private JLabel output;

    //constructor
    public NumberChooser(){
        setTitle("BitchFace");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        //content pane
        Container cp = getContentPane();

        //add a panel for the size
        sizePanel = new JPanel();
        sizePanel.setBorder(new EmptyBorder(5, 5, 5, 5) );//adds margin to panel
        sizePanel.setLayout(new FlowLayout());
        size = new JTextField("3",5);
        sizePanel.add(new JLabel("N"));
        sizePanel.add(size);
        rebuildButton = new JButton("Rebuild");
        rebuildButton.addActionListener(this);
        sizePanel.add(rebuildButton);
        //add bottom panel for output

            sizePanel.add(new JButton("Player:"), BorderLayout.EAST);
            sizePanel.add(new JButton("Move:"), BorderLayout.EAST);
            sizePanel.add(new JButton("Winner:"), BorderLayout.EAST);


        //add a panel for the numbers
        buttonPanel = new JPanel();
        buttonPanel.setBorder(new EmptyBorder(5, 5, 5, 5) );//adds margin to panel
        buildButtonsPanel();

        //add bottom panel for output
        JPanel bottomPanel = new JPanel();
        bottomPanel.setBorder(new EmptyBorder(5, 5, 5, 5) );//adds margin to panel
        bottomPanel.add(new JButton("New Game"), BorderLayout.SOUTH);
        bottomPanel.add(new JButton("Advise"), BorderLayout.SOUTH);
        bottomPanel.add(new JButton("Quit"), BorderLayout.SOUTH);




        //add panels to main pane
        cp.setLayout(new BorderLayout());
        cp.add(sizePanel, BorderLayout.EAST);
        cp.add(buttonPanel, BorderLayout.CENTER);
        cp.add(bottomPanel, BorderLayout.SOUTH);
        pack();
    }

    //this is a helper method to rebuild the buttons panel
    private void buildButtonsPanel(){
        int n = 3;
        try{
            n = Integer.parseInt(size.getText());
        }catch(Exception e){
            e.printStackTrace();
        }
        buttonPanel.removeAll();
        buttonPanel.setLayout(new GridLayout(n,n,4,4));
        buttons = new JButton[n*n];
        for(int i=0; i < buttons.length; i++){

            buttons[i] = new JButton("*");
            buttonPanel.add(buttons[i]);
            buttons[i].addActionListener(this);
        }
        revalidate();
        repaint();
        pack();
    }

    public void actionPerformed(ActionEvent e){
        Object s = e.getSource();
        //check to see if the action came from the rebuild button
        if(s == rebuildButton){
            buildButtonsPanel();
        }
        //otherwise it came from the grid

    }

    //entry point
    public static void main(String[] args){
        //create the GUI
        NumberChooser nc = new NumberChooser();
        nc.setVisible(true);
    }

}

正確である必要はありません。ほぼ同じです。また、実装していないため、X または勝者変数はありません。また、マージンを (5,5,5,5) から (1,1,1,1) のように変更しようとしましたが、何も変わらなかったので、混乱しました。

これに関するヘルプ、またはこの課題の一般的な進め方を教えていただければ幸いです。

(そして、私の画像は受け付けていません。申し訳ありません。) リンクは次のとおりです。

問題は、次のようになっていることです。 私のGUIはどのように見えますか

https://i1224.photobucket.com/albums/ee362/Devolutor/COPimage1_zps459f304b.png

そして、それは次のようになるはずです: それはどのように見えるべきか

http://i1224.photobucket.com/albums/ee362/Devolutor/COPimage2_zps8981c846.png

4

1 に答える 1

1

ボタン間のスペースを増やすには、グリッド レイアウトに 4 よりも大きいピクセル数を使用します。

buttonPanel.setLayout(new GridLayout(n,n,4,4));

右側にフローではなくグリッドを配置するには、FlowLayout ではなく GridLayout を使用します (ボタンの場合と同様ですが、4 行 2 列です)。

于 2013-04-17T20:45:54.323 に答える