gpt4 book ai didi

Java - 两个并排的网格

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:14:49 24 4
gpt4 key购买 nike

大家好,我是 Java 的新手,这是我使用 GUI 的第一件作品。基本上我有一些代码来创建一个网格,但我需要的是两个网格并排显示在屏幕上以用于 batteships 游戏,我的网格代码如下,任何人都可以帮助我放置另一个单独的实例在同一个屏幕上?

/**
BattleGui:
*/

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;

public class BattleGui implements ActionListener
{
// Default filename to use for saving and loading files
// Possible improvement: replace with a FileChooser
private final static String DEFAULT_FILENAME = "battlegui.txt";
private int GRID_SIZE = 8;
private JButton [] buttonArray;

public JMenuBar createMenu()
{
JMenuBar menuBar = new JMenuBar();
JMenu menu = new JMenu("Battle Menu");
JMenuItem menuItem;

menuBar.add(menu);

// A group of JMenuItems. You can create other menu items here if desired
menuItem = new JMenuItem("New Game");
menuItem.addActionListener(this);
menu.add(menuItem);

menuItem = new JMenuItem("Load Game");
menuItem.addActionListener(this);
menu.add(menuItem);

menuItem = new JMenuItem("Save Game");
menuItem.addActionListener(this);
menu.add(menuItem);

menuItem = new JMenuItem("Quit");
menuItem.addActionListener(this);
menu.add(menuItem);

//a submenu
menu.addSeparator();
return menuBar;
}

public Container createContentPane()
{
int numButtons = GRID_SIZE * GRID_SIZE;
JPanel grid = new JPanel(new GridLayout(GRID_SIZE,GRID_SIZE));
buttonArray = new JButton[numButtons];

for (int i=0; i<numButtons; i++)
{
buttonArray[i] = new JButton(" ");

// This label is used to identify which button was clicked in the action listener
buttonArray[i].setActionCommand("" + i); // String "0", "1" etc.
buttonArray[i].addActionListener(this);
grid.add(buttonArray[i]);
}
return grid;
}

/**
* This method handles events from the Menu and the board.
*
*/
public void actionPerformed(ActionEvent e)
{
String classname = getClassName(e.getSource());
JComponent component = (JComponent)(e.getSource());

if (classname.equals("JMenuItem"))
{
JMenuItem menusource = (JMenuItem)(e.getSource());
String menutext = menusource.getText();

// Determine which menu option was chosen
if (menutext.equals("Load Game"))
{
/* BATTLEGUI Add your code here to handle Load Game **********/
LoadGame();
}
else if (menutext.equals("Save Game"))
{
/* BATTLEGUI Add your code here to handle Save Game **********/
SaveGame();
}
else if (menutext.equals("New Game"))
{
/* BATTLEGUI Add your code here to handle Save Game **********/
NewGame();
}
}
// Handle the event from the user clicking on a command button
else if (classname.equals("JButton"))
{
JButton button = (JButton)(e.getSource());
int bnum = Integer.parseInt(button.getActionCommand());
int row = bnum / GRID_SIZE;
int col = bnum % GRID_SIZE;

/* BATTLEGUI Add your code here to handle user clicking on the grid ***********/
fireShot(row, col);
}
}

/**
* Returns the class name
*/
protected String getClassName(Object o)
{
String classString = o.getClass().getName();
int dotIndex = classString.lastIndexOf(".");
return classString.substring(dotIndex+1);
}

/**
* Create the GUI and show it.
* For thread safety, this method should be invoked from the event-dispatching thread.
*/
private static void createAndShowGUI()
{
// Create and set up the window.
JFrame frame = new JFrame("Battleships");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);


JPanel col1 = new JPanel();
// Create and set up the content pane.
BattleGui battlegui = new BattleGui();
frame.setJMenuBar(battlegui.createMenu());
frame.setContentPane(battlegui.createContentPane());


// Display the window, setting the size
frame.setSize(600, 600);
frame.setVisible(true);
}

/**
* Sets a Gui grid square at row, col to display a character
*/
public boolean setGuiSquare(int row, int col, char c)
{
int bnum = row * GRID_SIZE + col;
if (bnum >= (GRID_SIZE*GRID_SIZE))
{
return false;
}
else
{
buttonArray[bnum].setText(Character.toString(c));
}
return true;
}

/**
* This is a standard main function for a Java GUI
*/
public static void main(String[] args)
{
//Schedule a job for the event-dispatching thread:
//creating and showing this application's GUI.
javax.swing.SwingUtilities.invokeLater(new Runnable()
{
public void run()
{

createAndShowGUI();
}
});
}

//************************************************************************
//*** BATTLEGUI: Modify the methods below to respond to Menu and Mouse click events

/**
* This method is called from the Menu event: New Game.
* BATTLEGUI
*/
public void NewGame()
{
System.out.println("New game selected");
}


/**
* This method is called from the Menu event: Load Game.
* BATTLEGUI
*/
public void LoadGame()
{
System.out.println("Load game selected");
}


/**
* This method is called from the Menu event: Save Game.
* BATTLEGUI
*/
public void SaveGame()
{
System.out.println("Save game selected");
}

/**
* This method is called from the Mouse Click event.
* BATTLEGUI
*/
public void fireShot(int row, int col)
{
System.out.println("Fire shot selected: at (" + row + ", " + col + ")");
}
}

最佳答案

使用 new GridLayout(1,2) 将两个网格放入一个面板中(然后将该面板添加到您现在添加的任何网格中)。

例如

    frame.setJMenuBar(battlegui.createMenu());

JPanel gui = new JPanel(new GridLayout(1,2,5,5));
gui.setBorder(new EmptyBorder(5,5,5,5));
gui.add(battlegui.createContentPane());
gui.add(battlegui.createContentPane());
frame.setContentPane(gui);

关于Java - 两个并排的网格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9790331/

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