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

时间:2014-02-28 10:55:15

标签: 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 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

5 个答案:

答案 0 :(得分:2)

对于具有类似功能的重复性任务,我喜欢使用方法。大多数时候它会使代码更清晰。它不会缩短您当前的代码,但是在添加了侦听器或其他任何您想要添加的代码之后,它会。您可以传递任意数量的变量。

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);
} 

甚至可以查看this question

中的一些答案

答案 1 :(得分:1)

你可以创建带循环的按钮

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

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

还有更多......其他方式

答案 2 :(得分:1)

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++;
}

答案 3 :(得分:1)

正如其他人所说,你可以创建一个循环并向数组中添加按钮,但是Java不支持宏[1],这似乎是你想做的事情(那就是拥有代码)流程自动化,但仍保留合理的变量名称)。

注意:虽然可以在Java中破解某种简单的宏格式,但我建议不要这样做。

您最好的选择是查看生成Java的代码生成器 - this可能是一个很好的起点。

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

答案 4 :(得分:1)

import java.awt.Component;
import java.awt.Container;

import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JFrame;

public class ComponentFactory {

  public static void main(String[] args) {
    Box box=Box.createVerticalBox();
    addAll(box, createButtons("foo", "bar", "baz")); // <----------
    JFrame f=new JFrame("Example");
    f.setContentPane(box);
    f.pack();
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f.setVisible(true);
  }

  static void addAll(Container target, Component... all) {
    for(Component c:all) target.add(c);
  }

  static JButton[] createButtons(String... label) {
    final int num=label.length;
    JButton[] all=new JButton[num];
    for(int i=0; i<num; i++) all[i]=new JButton(label[i]);
    return all;
  }
}