0

GUI でマインスイーパ ゲームを作成しようとしていますが、フィールドのサイズと地雷の数を変更できるメニューを追加しているときに、JFrame を変更できませんでした。プレーヤーが JTextBox に何かを入力し、JDialog にある送信ボタンを押した場合に、ボタンと地雷の数を変更したいと考えています。基本的に、 MineSweeperクラスで sizeX、sizeY、鉱山変数を変更してから、フレームを新しい値で更新したいと考えています。

    public class MineSweeper {
private static int sizeX=20;
private static int sizeY=20;
private static int mines=20;

private static JFrame frame;

public static void setX(int x){
    sizeX = x;
}
public static void setY(int y){
    sizeY = y;
}
public static void setM(int m){
    mines = m;
}
public static void refreshFrame(){
    frame.validate();
    frame.repaint();
}

public static void main(String[] args){

    frame = new JFrame("");
    frame.setTitle("MineSweeper Game");
    frame.setBackground(Color.white);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    JMenuBar menu = new JMenuBar();
    JMenu options = new JMenu("Options");
    JMenuItem gameProperties = new JMenuItem("Game Properties");
    menuHandler menuHandling = new menuHandler();
    gameProperties.addActionListener(menuHandling);
    options.add(gameProperties);
    menu.add(options);
    frame.setJMenuBar(menu);
    frame.setSize(sizeX*sizeY, sizeX*sizeY);
    if(gameProperties.isEnabled()) frame.validate();
    frame.add(new MineSweeperGUI(sizeX, sizeY, mines));
    frame.setVisible(true);

}

}

class menuHandler implements ActionListener{
JDialog dialog;
JButton button;
JPanel panel;
JLabel sizeRow, sizeCols, mineCount;
JTextField sizeX, sizeY, mines;
int  x, y, m;
public menuHandler(){
    dialog = new JDialog();
    dialog.setSize(400,120);
    panel = new JPanel(new GridLayout(4, 2));
    sizeRow = new JLabel("Row size of the field: ");
    sizeCols = new JLabel("Column size of the field: ");
    mineCount = new JLabel("Number of mines: ");
    sizeX = new JTextField(10);
    sizeY = new JTextField(10);
    mines = new JTextField(10);
    panel.add(sizeRow);
    panel.add(sizeX);
    panel.add(sizeCols);
    panel.add(sizeY);
    panel.add(mineCount);
    panel.add(mines);
    button = new JButton("Submit");
    panel.add(button);
    dialog.add(panel);
}

public void actionPerformed(ActionEvent e) {
    dialog.setVisible(true);

    button.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent e){
            String sizeofRows = sizeX.getText();
            String sizeofCols = sizeY.getText();
            String countofMines = mines.getText();
            MineSweeper.setX(Integer.parseInt(sizeofRows));
            MineSweeper.setY(Integer.parseInt(sizeofCols));
            MineSweeper.setM(Integer.parseInt(countofMines));
            MineSweeper.refreshFrame();
            dialog.dispose();
        }
    });

}

}

4

1 に答える 1

1

この単純なゲームで使用されているアプローチを採用できるかもしれません。インスタンスのを持つJPanel名前付きを使用します。ユーザーがゲームのサイズを変更すると、が を呼び出します。buttonPanelGridLayoutJToggleButtonActionListenerresetGame()

buttonPanel.validate();
于 2013-04-04T08:46:31.510 に答える