需要一个创建按钮

时间:2017-08-27 19:22:11

标签: java swing parsing button arguments

我正在尝试在JAVA中创建一个方法myMethod,它可以根据面板大小用按钮填充用户定义的jPanel。如果我将“Object j”更改为“jFrameScreen j”,删除Component p并将变量p更改为j,则它可以工作。 myMethod中的jPanel2。 但这不是我想要的,我希望用户能够在调用myMethod时确定创建按钮的jFrame和jPanel。

当我运行这里显示的代码时,它给了我这些错误:

p.add(btn[b]);  //JButton cannot be converted to PopupMenu
j.setVisible(true); //Cannot find symbol, method setVisible(boolean)

我的工作如下:

public class Main {
    public static void main(String[] args) {
        jFrameScreen j = new jFrameScreen();
        myMethod(j, j.jPanel2, 10, 10, 600, 400);
    }
    public static void myMethod(Object j, Component p, int col, int row, int myWidth, int myHeight) {
        int bWidth = myWidth / col;
        int bHeight = myHeight / row;
        int numberOfButtons = (myWidth / bWidth) * (myHeight / bHeight);
        JButton btn[] = new JButton[numberOfButtons];
        for (int k = 0, x = 0, b = 0; k < myWidth / bWidth; k++, x += bWidth) {
            for (int i = 0, y = 0; i < myHeight / bHeight; i++, y += bHeight, b++) {
                btn[b] = new JButton();
                btn[b].setBounds(2 + x, 3 + y, bWidth, bHeight);
                btn[b].setText(Integer.toString(b));
                btn[b].setVisible(true);
                p.add(btn[b]);  //JButton cannot be converted to PopupMenu
            }
        } 

        p.setVisible(true);  
        j.setVisible(true);  //Cannot find symbol, method setVisible(boolean)
     }
}

1 个答案:

答案 0 :(得分:3)

使用Object类型声明的变量没有setVisible()方法。

并且Component.add()仅接受PopupMenu类的实例:

 public void add(PopupMenu popup) {
  

但这不是我想要的,我希望用户能够确定   什么jFrame和jPanel在调用时将创建按钮   “myMethod的”。

您尝试提供通用方法,但根据您的要求,您不依赖于合适的基类 ObjectComponent过于通用,无法分别代表JFrameJPanel

如果这两个参数必须代表这些类型的实例,请使用它们:Object j替换JFrame jComponent p替换JPanel p

此外,他们的命名确实不好。 framepanel更好:

public static void myMethod(JFrame frame, JPanel panel, int col, int row, int myWidth, int myHeight) {