在数组中创建JButtons时出错

时间:2013-03-11 23:23:59

标签: java arrays swing jbutton

我正在编写一个程序,它将有一个9x9按钮,每个按钮从左上角开始向右移动1到81

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

public class MS extends JFrame implements ActionListener {

    static JFrame bframe;
    static JPanel p;

    public MS() {
        p = new JPanel(new GridLayout(9,9));  
        private static JButton[][] jgo = new JButton[9][9];
        int count = 1;
        for(int row=0; row < 9; row++)
            for(int col=0; col < col; col++) {
                jgo[row][col] = new JButton("%d",count);
                p.add(jgo[row][col]);
                count++;
            }
        }

    public static void main(String[] args) {  
        bframe=new MS();    //CREATE me and 
        bframe.add(p);      //add the JPanel

                bframe.setSize(810,810);
        bframe.setLocation(0,0);                //where my upper left hand corner goes
        bframe.setVisible(true);                //I start out invisible
        bframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  //need this for the window manager
    }
}

我的错误发生在我的构造函数中,它有关于如何创建按钮和设置值的操作。

2 个答案:

答案 0 :(得分:3)

JButton没有JButton(String, int)形式的构造函数用于格式化目的,您可能希望这样做:

new JButton(Integer.toString(count))

而不是

new JButton("%d",count)

附注:

您不能在构造函数中使用private关键字:

 private static JButton[][] jgo = new JButton[9][9];
    ^ 

此行将立即退出:

for (int col = 0; col < col; col++) {

因为col < col将评估为true,内部循环将不会被执行。

此语句只能在类块中有效。

静态变量通常被认为是设计不佳。变量bframep可用于本地范围。

答案 1 :(得分:3)

在这里,您将获得JButton类

的构造函数列表
JButton()
      Creates a button with no set text or icon.
JButton(Action a)
      Creates a button where properties are taken from the Action supplied.
JButton(Icon icon)
      Creates a button with an icon.
JButton(String text)
      Creates a button with text.
JButton(String text, Icon icon)
      Creates a button with initial text and an icon.

没有任何人喜欢你正在使用的那个。

JButton("%d",count); // JButton(String,int); or JButton(format,int);

相反,您可以使用

JButton(""+count)://JButton(String text)