首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建可点击的JButton矩阵

创建可点击的JButton矩阵
EN

Stack Overflow用户
提问于 2013-06-17 16:31:14
回答 5查看 6K关注 0票数 1

我想要完成的是:

*包含按钮矩阵的窗口。假设是10x10。

*按钮应显示"1“或"0",并在我单击它们时更改。

*按钮的值(1或0)应存储在String[][]矩阵中。

目前,我有一个包含值的String[][] 2D数组。我可以使用以下代码在带有可单击按钮的窗口中显示它:

代码语言:javascript
复制
//dim = 10
//matrix is the 10x10 String[][] matrix containing 1s or 0s

private static void convertMatrixToGUI() {
    JFrame f = new JFrame("Window containing a matrix");
    JPanel p = new JPanel();
    p.setLayout(new GridLayout(dim, dim));

    for(int r = 0; r < dim; r++){
        for(int c = 0; c < dim; c++){
            p.add(new JButton(matrix[r][c]));
        }
    }
    f.add(p);
    f.pack();
    f.setVisible(true);
}

下一步是在单击按钮时更改矩阵中的值。如果我单击0,它应该会将其更改为1,反之亦然。这些值必须一直存储在String[][]中。

如何通过单击图形矩阵中的按钮来更改字符串矩阵中的内容?如果我单击位置[5][2]处的按钮,程序如何知道我想要将字符串矩阵更改为位置[5][2]

最好的问候山羊猫

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-06-17 16:49:04

我给您提供一个名为ChangingButtonJButton扩展的示例,该扩展具有分配给它的矩阵位置和矩阵。此外,它还创建了一个ActionListener,它将在单击时更改名称。

代码语言:javascript
复制
public static class ChangingButton extends JButton {

    private final int[][] fModel;
    private final int fX;
    private final int fY;

    public ChangingButton(final int x, final int y, final int[][] model) {
        fX= x;
        fY= y;
        fModel= model;

        addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                fModel[fX][fY] = fModel[fX][fY] == 1 ? 0 : 1;
                updateNameFromModel();
            }
        });
        updateNameFromModel();
    }

    private void updateNameFromModel() {
        setText(String.valueOf(fModel[fX][fY]));
    }

}

这是您的主要测试类。

代码语言:javascript
复制
public static void main(String[] args) {

    int dim=10;
    int matrix[][] = new int[10][10];

    JFrame f = new JFrame("Window containing a matrix");
    JPanel p = new JPanel();
    p.setLayout(new GridLayout(dim, dim));

    for(int r = 0; r < dim; r++){
        for(int c = 0; c < dim; c++){
            ChangingButton button= new ChangingButton(r, c, matrix);
            p.add(button);
        }
    }
    f.add(p);
    f.pack();
    f.setVisible(true);

}

希望能有所帮助。如果你有不明白的地方,请提出来。

票数 2
EN

Stack Overflow用户

发布于 2013-06-17 16:36:35

GridButtonPanel说明了基本原理。替换JToggleButton以获得二进制选中/未选中状态的效果。

票数 4
EN

Stack Overflow用户

发布于 2013-06-17 16:39:03

您需要的是一个ActionListener。

本教程将向您介绍如何使用它。

http://docs.oracle.com/javase/tutorial/uiswing/events/actionlistener.html

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17143338

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档