开发者社区 问答 正文

我需要帮助来为CIV类型的游戏创建带有一组按钮和文本字段的JFrame

通常,我要为每个城市创建一个按钮网格,然后单击每个按钮时,让文本框显示有关城市的信息,例如资源,人口等。

我的代码如下。我希望布局保持不变,因为城市规模在3x2的小到6x4的中到12x8的大按钮网格之间。感谢您提供的任何帮助。

public class Map{

    JFrame frame=new JFrame(); //creates frame
    JButton[][] grid; //names the grid of button

    public Map(int width, int length){ //constructor
        frame.setLayout(new GridLayout(width+1,length)); //set layout

        grid=new JButton[width][length]; //allocate the size of grid
        for(int y=0; y<length; y++){
            for(int x=0; x<width; x++){
                grid[x][y]=new JButton("("+x+","+y+")"); //creates new button     
                grid[x][y].addActionListener(new ActionListener() {

                    @Override
                    public void actionPerformed(ActionEvent e) {
                        // TODO Auto-generated method stub
                        System.out.print("This");

                    }});
                frame.add(grid[x][y]); //adds button to grid
            }
        }
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(500, 500); //sets appropriate size for frame
        frame.setVisible(true); //makes frame visible
    }


}

展开
收起
垚tutu 2019-12-04 17:15:05 615 分享 版权
阿里云 AI 助理回答

为了实现您的需求,您可以通过动态创建JButton并为每个按钮添加事件监听器来显示对应城市的信息。以下是一个基于您代码框架的示例,展示了如何根据城市信息填充按钮网格,并在单击按钮时显示相关信息:

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Map {

    JFrame frame = new JFrame(); // 创建框架
    JButton[][] grid; // 命名按钮网格
    String[][] cityData; // 存储城市信息,例如:{{"城市名1", "资源1", "人口1"}, {"城市名2", "资源2", "人口2"}, ...}

    public Map(int width, int length) { // 构造函数
        frame.setLayout(new GridLayout(width, length)); // 设置布局

        grid = new JButton[width][length]; // 分配网格大小
        cityData = new String[width][length]; // 初始化城市数据数组,这里应根据实际数据填充

        // 示例数据填充,实际应用中应从数据库或文件读取
        for (int y = 0; y < length; y++) {
            for (int x = 0; x < width; x++) {
                cityData[x][y] = "城市 " + (x + 1) + ", 区域 " + (y + 1); // 示例文本
                grid[x][y] = new JButton(cityData[x][y]); // 创建按钮并设置文本
                frame.add(grid[x][y]); // 将按钮添加到框架

                // 添加按钮点击事件监听器
                grid[x][y].addActionListener(new ActionListener() {
                    @Override
                    public void actionPerformed(ActionEvent e) {
                        JButton clickedButton = (JButton) e.getSource();
                        JOptionPane.showMessageDialog(frame, "城市信息: " + clickedButton.getText());
                        // 这里可以进一步处理,比如弹出详细信息对话框等
                    }
                });
            }
        }

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 设置默认关闭操作
        frame.pack(); // 自动调整框架大小以适应组件
        frame.setVisible(true); // 显示框架
    }

    public static void main(String[] args) {
        // 示例:创建一个3x2的城市按钮网格
        Map map = new Map(3, 2);
    }
}

这段代码首先定义了一个Map类,其中包含了一个用于存储城市信息的二维字符串数组cityData。在构造函数中,它会根据指定的宽度和长度创建按钮网格,并为每个按钮分配一个代表城市信息的文本。同时,为每个按钮添加了事件监听器,当按钮被点击时,会弹出一个消息框显示该按钮(即城市)的文本信息。

请注意,这里的cityData数组仅作为示例使用,实际应用中您可能需要从数据库或其他数据源获取这些信息。此外,根据您的具体需求,您可能还需要对UI进行进一步美化或功能扩展。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答
问答地址: