我正在为个人项目创建一个程序,我最终创建了许多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
答案 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;
}
}