我正在尝试在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)
}
}
答案 0 :(得分:3)
使用Object
类型声明的变量没有setVisible()
方法。
并且Component.add()
仅接受PopupMenu
类的实例:
public void add(PopupMenu popup) {
但这不是我想要的,我希望用户能够确定 什么jFrame和jPanel在调用时将创建按钮 “myMethod的”。
您尝试提供通用方法,但根据您的要求,您不依赖于合适的基类
Object
和Component
过于通用,无法分别代表JFrame
和JPanel
。
如果这两个参数必须代表这些类型的实例,请使用它们:Object j
替换JFrame j
,Component p
替换JPanel p
。
此外,他们的命名确实不好。 frame
和panel
更好:
public static void myMethod(JFrame frame, JPanel panel, int col, int row, int myWidth, int myHeight) {