如何用更少的代码在java中创建JButton?

如何用更少的代码在java中创建JButton?,java,swing,jbutton,Java,Swing,Jbutton,我正在为一个个人项目创建一个程序,我最终创建了许多JButton,它们占用了项目中相当多的行,是否可以减少仍然生成相同数量JButton的行数 JButton button1 = new JButton("Empty"); JButton button2 = new JButton("Empty"); JButton button3 = new JButton("Empty"); JButton button4 = new JButton("Empty"); JButton button

我正在为一个个人项目创建一个程序,我最终创建了许多JButton,它们占用了项目中相当多的行,是否可以减少仍然生成相同数量JButton的行数

JButton button1 = new JButton("Empty"); 
JButton button2 = new JButton("Empty"); 
JButton button3 = new JButton("Empty"); 
JButton button4 = new JButton("Empty"); 
JButton button5 = new JButton("Empty"); 
JButton button6 = new JButton("Empty"); 
JButton button7 = new JButton("Empty"); 
JButton button8 = new JButton("Empty"); 
JButton button9 = new JButton("Empty"); 
JButton button10 = new JButton("Empty"); 
JButton button11 = new JButton("Empty"); 
and about 5 more

你可以创建带有循环的按钮

Vector<Button> lists = new Vector<Button>();

for(int i = 0 ; i < 10000 ; i++) {
  JButton button = new JButton("Empty"); 
  lists.add(button);
}

越来越多。。其他方法

U可以创建带循环的按钮

Vector<Button> lists = new Vector<Button>();

for(int i = 0 ; i < 10000 ; i++) {
  JButton button = new JButton("Empty"); 
  lists.add(button);
}
JButton[] buttons = new JButton[n];

int x=0;
while(x<n){

buttons[n]= new JButton("Button");
x++;
}
越来越多。。另一种方式

JButton[] buttons = new JButton[n];

int x=0;
while(x<n){

buttons[n]= new JButton("Button");
x++;
}
而n是所需的按钮数

编辑

如果您想为按钮1、2、3等按钮分别命名

int x=0;
while(x<n){

buttons[n]= new JButton("Button "+(x+1));   //x+1 if you want to start from 1, because x is 0
x++;
}
而n是所需的按钮数

编辑

如果您想为按钮1、2、3等按钮分别命名

int x=0;
while(x<n){

buttons[n]= new JButton("Button "+(x+1));   //x+1 if you want to start from 1, because x is 0
x++;
}

正如其他人所指出的,您可以创建循环并向数组中添加按钮,但Java不支持宏,这似乎是您希望做的事情,即使代码过程自动化,但仍然保留合理的变量名

注意:虽然可以在Java中破解一些简单的宏格式,但我建议不要这么做

最好的办法是研究生成Java的代码生成器——这可能是一个很好的起点


为了生成代码,我只使用模板。虽然不完美,但很体面。基本上,你会有一些Java程序、Ant任务等程序,它们会调用FreeMarker库,给它们模板和数据,作为回报,它们将生成预期的代码。

正如其他人所指出的,你可以创建一个循环并向数组中添加按钮,但Java不支持宏,这似乎是您希望做的事情,让代码过程自动化,但仍然保留合理的变量名

注意:虽然可以在Java中破解一些简单的宏格式,但我建议不要这么做

最好的办法是研究生成Java的代码生成器——这可能是一个很好的起点


为了生成代码,我只使用模板。虽然不完美,但很体面。基本上你会有一些Java程序、Ant任务等,它们会调用FreeMarker库,给它们模板和数据,作为回报,它们会生成预期的代码。

对于具有类似功能的重复任务,我喜欢使用方法。大多数情况下,它会使代码更干净。它不会缩短您当前的代码,但在您添加侦听器或任何其他您可能想要添加的内容之后,它会缩短。您可以将任意数量的变量传递给它

public JButton createButton(String name, Color color) {
    JButton button = new JButton(name);
    button.setForeground(color);
    button.addActionListener(listener);
    return button;
}
然后你可以多次这样称呼它

JButton button = createButton("Hello", Color.BLUE);
总的来说,虽然它实际上是一个个案的基础上,你如何创建您的组件。如果你真正关心的是缩短你的代码。您可以始终使用循环和一些数据结构作为名称

String[] names = { "Hey", "Ya", "Yada" };
JButton[] buttons = new JButton[names.lenght];
for (int i = 0; i < buttons.length; i++) {
    buttons[i] = createButton(names[i], Color.BLUE);
} 

甚至可以看看

中的一些答案,对于具有类似功能的重复性任务,我喜欢使用方法。大多数情况下,它会使代码更干净。它不会缩短您当前的代码,但在您添加侦听器或任何其他您可能想要添加的内容之后,它会缩短。您可以将任意数量的变量传递给它

public JButton createButton(String name, Color color) {
    JButton button = new JButton(name);
    button.setForeground(color);
    button.addActionListener(listener);
    return button;
}
然后你可以多次这样称呼它

JButton button = createButton("Hello", Color.BLUE);
总的来说,虽然它实际上是一个个案的基础上,你如何创建您的组件。如果你真正关心的是缩短你的代码。您可以始终使用循环和一些数据结构作为名称

String[] names = { "Hey", "Ya", "Yada" };
JButton[] buttons = new JButton[names.lenght];
for (int i = 0; i < buttons.length; i++) {
    buttons[i] = createButton(names[i], Color.BLUE);
} 


你能给我举个例子吗+寻找更有效的解决方案:我真的很喜欢这种思维方式;你能给我举个例子吗+寻找更有效的解决方案:我真的很喜欢这种思维方式;这是演示…使用列表、数组列表、数组等等,但我不能给每个按钮一个名称,可以吗?例如button1、button2等等。为什么不改为Button+Indexy?你可以通过JButton Button=lists.geti访问每个按钮。你这样做是为了什么???你可以通过索引获得你的按钮,或者你可以使用Hash,key是你按钮的名字,这是演示…使用list,arraylist,array等等,但是我不能给每个按钮一个名字,对吗?例如button1、button2等等。为什么不改为Button+Indexy?你可以通过JButton Button=lists.geti访问每个按钮。你这样做是为了什么???你可以通过索引得到你的按钮,或者你可以使用Hash,key是你的按钮的名称hi,所以前三个按钮名称变量将是Hey,Ya和Yada。如果你使用第二种方法。例如,JButton-Hey=newjbutton;等等。不,只有按钮的文本。但是行动命令是嘿。如果您需要在代码中的其他地方访问它,您可以在数组中循环并检查Hey.equalsbuttons[i].getActionCommand{}是否正确。因此,您知道第一个示例,方法中的'String name'参数是按钮上的文本还是按钮的名称?它是文本和actionCommand。该按钮将没有访问变量。可通过
动作命令。或者在监听器中,如果事件对象在某个索引xhi处指向按钮,则可以通过检查来访问is,因此前三个按钮名称变量将是Hey、Ya和Yada。如果你使用第二种方法。例如,JButton-Hey=newjbutton;等等。不,只有按钮的文本。但是行动命令是嘿。如果您需要在代码中的其他地方访问它,您可以在数组中循环并检查Hey.equalsbuttons[i].getActionCommand{}是否正确。因此,您知道第一个示例,方法中的'String name'参数是按钮上的文本还是按钮的名称?它是文本和actionCommand。该按钮将没有访问变量。可以通过actionCommand访问它。或者在侦听器中,如果事件对象是==某个索引处的按钮,则可以通过选中来访问