Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 比较不同jbutton的文本_Java_Swing_Loops_Graphics_Jbutton - Fatal编程技术网

Java 比较不同jbutton的文本

Java 比较不同jbutton的文本,java,swing,loops,graphics,jbutton,Java,Swing,Loops,Graphics,Jbutton,我目前正在编写一个游戏,其中一部分包括将不同的瓷砖放入一个板中。我计划通过使用不同的按钮来模拟这一点,这些按钮将用于表示具有相应坐标的瓷砖。例如,一个按钮将显示“A1”、“A2”等。我想完成的是让用户单击“A1”瓷砖,然后板上代表“A1”的按钮将改变颜色,有没有办法通过板上的按钮并将其文本与用户的选择进行比较?以下是我用来创建董事会的内容: JButton[][] buttons = new JButton[9][12]; JPanel panel = new JPanel(ne

我目前正在编写一个游戏,其中一部分包括将不同的瓷砖放入一个板中。我计划通过使用不同的按钮来模拟这一点,这些按钮将用于表示具有相应坐标的瓷砖。例如,一个按钮将显示“A1”、“A2”等。我想完成的是让用户单击“A1”瓷砖,然后板上代表“A1”的按钮将改变颜色,有没有办法通过板上的按钮并将其文本与用户的选择进行比较?以下是我用来创建董事会的内容:

    JButton[][] buttons = new JButton[9][12];
    JPanel panel = new JPanel(new GridLayout(9,12,5,5));
    panel.setBounds(10, 11, 800, 600);
    frame.getContentPane().add(panel);


    //board
     for (int r = 0; r < 9; r++)
        {
            for (int c = 0; c < 12; c++)
            {
                buttons[r][c] = new JButton("" + (c + 1) + numberList[r]);
                buttons[r][c].setBackground(Color.WHITE);
                panel.add(buttons[r][c]);
            }

        }
JButton[][]按钮=新JButton[9][12];
JPanel面板=新JPanel(新网格布局(9,12,5,5));
嵌板.立根(10,11,800,600);
frame.getContentPane().add(面板);
//董事会
for(int r=0;r<9;r++)
{
对于(int c=0;c<12;c++)
{
按钮[r][c]=新的JButton(“+(c+1)+数字列表[r]);
按钮[r][c]。背景(颜色。白色);
面板.添加(按钮[r][c]);
}
}
这是我在其中一块瓷砖的代码上写的

JButton tile1 = new JButton ("A1");
        tile1.setBounds(60,725,60,60);
        frame.getContentPane().add(tile1);

        tile1.addActionListener(new ActionListener() 
         { 
                     public void actionPerformed(ActionEvent e) 
            { 
                String buttonText = tile1.getText();

                // iterating through all buttons:

                for(int i=0;i<buttons.length;i++){
                    for(int j=0;j<buttons[0].length;j++)
                    {
                        JButton b = buttons[i][j];
                        String bText = b.getText(); 

                       if(buttonText.equals(bText))
                        {
                            [i][j].setBackground(Color.BLACK);
                        }
                    }
                }
             } 
          } );
JButton tile1=新的JButton(“A1”);
第1条立根(60725,60,60);
frame.getContentPane().add(tile1);
tile1.addActionListener(新ActionListener()
{ 
已执行的公共无效操作(操作事件e)
{ 
字符串buttonText=tile1.getText();
//遍历所有按钮:

对于(int i=0;i,您可以向循环中创建的每个JButton添加一个操作侦听器,如下所示:

buttons[r][c].addActionListener(new ActionListener() { 
  public void actionPerformed(ActionEvent e) { 
    // your code here
  } 
} );
在代码中放置侦听器可能如下所示

JButton[][] buttons = new JButton[9][12];
    JPanel panel = new JPanel(new GridLayout(9,12,5,5));
    panel.setBounds(10, 11, 800, 600);
    frame.getContentPane().add(panel);


    //board
     for (int r = 0; r < 9; r++)
        {
            for (int c = 0; c < 12; c++)
            {
                buttons[r][c] = new JButton("" + (c + 1) + numberList[r]);
                buttons[r][c].setBackground(Color.WHITE);
                buttons[r][c].addActionListener(new ActionListener() { 
                   public void actionPerformed(ActionEvent e) { 
                      JButton button = (JButton) e.getSource();
                      String buttonText = button.getText();
                      // now iterate over all the jbuttons you have
                      for(int i=0;i<buttons.length;i++){
                          for(int j=0;j<buttons[0].length;j++){
                              JButton b = buttons[i][j];
                              String bText = b.getText();
                              if(buttonText.equals(bText)){
                                  // you found a match here
                                  // and you have the positions i, j
                                  // 
                              }
                          }
                      }
                   } 
                } );
                panel.add(buttons[r][c]);
            }

        }
JButton[][]按钮=新JButton[9][12];
JPanel面板=新JPanel(新网格布局(9,12,5,5));
嵌板.立根(10,11,800,600);
frame.getContentPane().add(面板);
//董事会
for(int r=0;r<9;r++)
{
对于(int c=0;c<12;c++)
{
按钮[r][c]=新的JButton(“+(c+1)+数字列表[r]);
按钮[r][c]。背景(颜色。白色);
按钮[r][c].addActionListener(新建ActionListener(){
已执行的公共无效操作(操作事件e){
JButton按钮=(JButton)e.getSource();
字符串buttonText=button.getText();
//现在迭代所有的jbutton
对于(inti=0;i您需要侦听器

在类中实现ActionListener。这将要求您向类中添加
public void actionPerformed(ActionEvent e){}

您使用的每个JButton都应该有一个动作侦听器。 应用这样一种方法:

JButton but = new JButton();
but.addActionListener(this);
public void actionPerformed(ActionEvent e) {
    if (e.getSource() == but)
        but.setBackground(Color.BLACK);
}
最后,在我们添加的actionPerformed方法中,您需要添加如下内容:

JButton but = new JButton();
but.addActionListener(this);
public void actionPerformed(ActionEvent e) {
    if (e.getSource() == but)
        but.setBackground(Color.BLACK);
}
另外,您可以通过以下方式获取按钮的文本值:

but.getText();

但是,我仍然不明白如何比较两个不同的JButtons的文本。我在考虑有一个方法,当单击一个互动程序时,它会调用自己,然后它会遍历电路板互动程序,找到对应的,然后更改颜色@Mallikarjun MI have edited actionPerformed method。P请检查是否适合您的案例。此外,我还没有编译它,因为没有完整的代码。可能会有一些错误,但我想您可能会明白。非常感谢!只是为了确保,当单击任何按钮时,actionPerformed方法是否会激活?因为用户不会单击面板上的磁贴。相反,我将放置but屏幕底部的图标表示平铺,文本将具有用户可用的坐标,单击该图标将更改屏幕上相应按钮的颜色board@ZeldaX是的,当单击任何按钮时,actionPerformed方法都会激活,因为我们正在为所有JButton设置操作侦听器我们的回答!我在循环中添加了actionListener,这样板上的每个磁贴都会有一个。但是,我仍然不知道如何让它将单独磁贴上的文本与板上的文本进行比较。我正在考虑有一个方法,在单击磁贴时调用自己,然后它将遍历板上的磁贴,找到一个corresponds,然后更改颜色。您不需要找到对应的,因为侦听器为您完成了相应的工作。它“侦听”。一旦用户与侦听器交互,就会发生一些事情(我在actionPerformed方法中指定了它。唯一的问题应该是,但是(我使用的按钮作为示例)必须在全局范围上声明。这意味着如果用户按“A1”按钮,A1按钮将变为黑色。如果您希望从该按钮获取文本值,我在附言中写道如何获取。对不起,我仍然有点困惑。您是说我需要将actionListener添加到这两个按钮中,即板上的平铺和JButtons,对吗?然后,用户单击e tile?你写了“但是.挫折背景”,但我不知道哪个tile会被点击,因此不知道板上的哪个按钮会改变颜色。我理解的是“e”在单击任何按钮时调用,然后。getSource获取文本并将其与按钮进行比较?首先,您没有平铺和jbuttons。通过创建,您将拥有一个JPanel,其中GridLayout包含jbuttons。每个按钮都有一个侦听器,因此,如果激活了侦听器,则只会为您的按钮激活它因此,在A1按钮的侦听器中写入的任何代码都只有在按下A1时才会触发。请更正行:[i][j]。setBackground(Color.BLACK);to b[i][j]。setBackground(Color.BLACK);