无法找到按下按钮的坐标

时间:2013-12-20 22:33:52

标签: java eclipse swing

唯一的问题是每当我将x和y的初始值设置为大于10时,它会给出错误的结果。请帮助。对于x和y小于10的值,它可以正常工作。 我也调试了它,并发现在第10个索引之后按下按钮时它的行为就像将变量i设置为1.我无法解决这个问题因为我是java.so中的新手我真的需要帮助。< / p>

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.*;
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.SwingConstants;
import javax.swing.SwingUtilities;

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

import javax.swing.JFrame;

class butMaddFrame extends JFrame implements ActionListener
{
int x=12;
int y=12;
  JButton[][] buttons = new JButton[x][y];
    JPanel mPanel = new JPanel();
    JPanel bPanel = new JPanel();
    JPanel cPanel = new JPanel();
    JTextArea scoreKeeper = new JTextArea();
    Container c = getContentPane();
    int[][] intArray = new int[x][y];

    public butMaddFrame()
    {
        butGen();
        score2();
        //cPanel.add(scoreKeeper);
        bPanel.setLayout(new GridLayout(x,y));
        mPanel.setLayout(new BorderLayout());

        mPanel.add(bPanel, BorderLayout.CENTER);
      //  mPanel.add(cPanel, BorderLayout.LINE_END);
        c.add(mPanel);

        setTitle("ButtonMaddness");
        setSize(1000,400);
        setLocation(200,200);
   setVisible(true);
    }

    private void butGen()
    {
        for(int i=0;i<x;i++)
            for(int j=0;j<y;j++)
            {
                buttons[i][j] = new JButton(String.valueOf(i)+"x"+String.valueOf(j));
               buttons[i][j].setActionCommand("button" +i +"_" +j);
                buttons[i][j].addActionListener(this);
                bPanel.add(buttons[i][j]);
            }
    }

    private void score()
    {
  //      String string = "";
    //    for(int i=0;i<x;i++)
      //  {
        //    for(int j=0;j<y;j++)
              //  string += i+"x"+j+" => " +String.valueOf(intArray[i][j]) +"\t";
           // string+= "\n";
       // }
      //  scoreKeeper.setText(string);

        }

    private void score2()
    {
        for(int i=0;i<x;i++)
            for(int j=0;j<y;j++)
                buttons[i][j].setText(String.valueOf(intArray[i][j]));


        }

    public void actionPerformed(ActionEvent e)
    {
        if(e.getActionCommand().contains("button"))
        {
            int i =    Integer.parseInt(Character.toString(e.getActionCommand().replaceAll("button","").replaceAll        ("_", "").charAt(0)));
            int j =    Integer.parseInt(Character.toString(e.getActionCommand().replaceAll("button","").replaceAll           ("_", "").charAt(1)));

            intArray[i][j]++;
           // buttons[i][j].setVisible(false);


            buttons[i][j].setBackground(Color.black);



       System.out.println(e.getActionCommand() +"  " +i +"  " +j);
        }
     //   score2();
    }
}




 import java.awt.*;
 import javax.swing.*;
import java.awt.event.*;
import javax.swing.event.*;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.SwingConstants;
import javax.swing.SwingUtilities;
   public class buttonMaddness {
 public static void main(String[] args)
     {
            butMaddFrame myFrame = new butMaddFrame();
            myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     }
  }

1 个答案:

答案 0 :(得分:3)

你的问题在这里:

replaceAll("_", "").charAt(0)

因为你的一些按钮有11_9之类的东西 例。所以你只得到了数字11中的前一个。

只需更改您的actionPerformed方法
对此,您的错误将被修复。

    public void actionPerformed(ActionEvent e) {
        if (e.getActionCommand().contains("button")) {

            String str = e.getActionCommand().replaceAll("button", "");
            System.out.println(str);
            String[] v = str.split("_");
            int i = Integer.parseInt(v[0]);
            int j = Integer.parseInt(v[1]);
            /*
            int i = Integer.parseInt(Character.toString(e.getActionCommand()
                    .replaceAll("button", "").replaceAll("_", "").charAt(0)));
            int j = Integer.parseInt(Character.toString(e.getActionCommand()
                    .replaceAll("button", "").replaceAll("_", "").charAt(1)));
             */

            intArray[i][j]++;
            // buttons[i][j].setVisible(false);

            buttons[i][j].setBackground(Color.black);

            System.out.println(e.getActionCommand() + "  " + i + "  " + j);
        }
        // score2();
    }