Java 有没有办法缩短这种重复的代码?(添加JPanel组件)
有没有办法缩短这段代码?这是非常重复的。我在想,也许有一种方法可以在我的Widget类中创建一个返回对象数组的方法,这样我就可以将代码缩短为一行:Java 有没有办法缩短这种重复的代码?(添加JPanel组件),java,class,oop,methods,jpanel,Java,Class,Oop,Methods,Jpanel,有没有办法缩短这段代码?这是非常重复的。我在想,也许有一种方法可以在我的Widget类中创建一个返回对象数组的方法,这样我就可以将代码缩短为一行: ecoPanel.add(economy.getObjects); economy,standard,advanced,exception都是从小部件类I创建的小部件对象 ecoPanel.add(economy.styleLB); //adds economy textFiield to our ecoPanel ecoPanel
ecoPanel.add(economy.getObjects);
economy
,standard
,advanced
,exception
都是从小部件
类I创建的小部件
对象
ecoPanel.add(economy.styleLB); //adds economy textFiield to our ecoPanel
ecoPanel.add(economy.redLB); //adds economy red label to our ecoPanel
ecoPanel.add(economy.redTF); //adds red textfield to show inventory amount
ecoPanel.add(economy.greenLB); //adds economy green label to our ecoPanel
ecoPanel.add(economy.greenTF); //adds green textfield to show inventory amount
ecoPanel.add(economy.blueLB); //adds economy blue label to our ecoPanel
ecoPanel.add(economy.blueTF); //adds blue textfield to show inventory amount
ecoPanel.add(economy.yellowLB); //adds economy yellow label to our ecoPanel
ecoPanel.add(economy.yellowTF); //adds yellow textfield to show inventory amount
ecoPanel.add(economy.totalLB); //adds economy total label to our ecoPanel
ecoPanel.add(economy.totalTF); //adds total textfield to show inventory amount
stdPanel.add(standard.styleLB); //adds standard textFiield to our stdPanel
stdPanel.add(standard.redLB); //adds standard red label to our stdPanel
stdPanel.add(standard.redTF); //adds red textfield to show inventory amount
stdPanel.add(standard.greenLB); //adds standard green label to our stdPanel
stdPanel.add(standard.greenTF); //adds green textfield to show inventory amount
stdPanel.add(standard.blueLB); //adds standard blue label to our stdPanel
stdPanel.add(standard.blueTF); //adds blue textfield to show inventory amount
stdPanel.add(standard.yellowLB); //adds standard yellow label to our stdPanel
stdPanel.add(standard.yellowTF); //adds yellow textfield to show inventory amount
stdPanel.add(standard.totalLB); //adds standard total label to our stdPanel
stdPanel.add(standard.totalTF); //adds total textfield to show inventory amount
advPanel.add(advanced.styleLB); //adds advanced textFiield to our advPanel
advPanel.add(advanced.redLB); //adds advanced red label to our advPanel
advPanel.add(advanced.redTF); //adds red textfield to show inventory amount
advPanel.add(advanced.greenLB); //adds advanced green label to our advPanel
advPanel.add(advanced.greenTF); //adds green textfield to show inventory amount
advPanel.add(advanced.blueLB); //adds advanced blue label to our advPanel
advPanel.add(advanced.blueTF); //adds blue textfield to show inventory amount
advPanel.add(advanced.yellowLB); //adds advanced yellow label to our advPanel
advPanel.add(advanced.yellowTF); //adds yellow textfield to show inventory amount
advPanel.add(advanced.totalLB); //adds advanced total label to our advPanel
advPanel.add(advanced.totalTF); //adds total textfield to show inventory amount
excPanel.add(exceptional.styleLB); //adds exceptional textFiield to our excPanel
excPanel.add(exceptional.redLB); //adds exceptional red label to our excPanel
excPanel.add(exceptional.redTF); //adds red textfield to show inventory amount
excPanel.add(exceptional.greenLB); //adds exceptional green label to our excPanel
excPanel.add(exceptional.greenTF); //adds green textfield to show inventory amount
excPanel.add(exceptional.blueLB); //adds exceptional blue label to our excPanel
excPanel.add(exceptional.blueTF); //adds blue textfield to show inventory amount
excPanel.add(exceptional.yellowLB); //adds exceptional yellow label to our excPanel
excPanel.add(exceptional.yellowTF); //adds yellow textfield to show inventory amount
excPanel.add(exceptional.totalLB); //adds exceptional total label to our excPanel
excPanel.add(exceptional.totalTF); //adds total textfield to show inventory amount
也许将标签和文本字段放在单独的ArrayList中,然后使用for循环添加它们会起作用。另外,如果您想把它们都按顺序排列,您可以创建一个对象的arraylist,然后使用
//add a for loop here
String str = arrList.get(i).getClass.getName();
if(str.equals("JLabel"))
{
panel.add(arrList.get(i));
}
else
{
// other objects added
}
然后继续这样添加它们 在Widget类中添加如下方法如何:
public Component[] getObjects()
{
return new Component[]{styleLB,redLB,redTF,greenLB,greenTF,blueLB,blueTF,yellowLB,yellowTF,totalLB,totalTF};
}
public void addAllToPanel(JPanel p)
{
Component[] arr = getObjects();
for(Component c:arr)
p.add(c);
}
然后像这样使用它
economy.addAllToPanel(ecoPanel);
standard.addAllToPanel(stdPanel);
advanced.addAllToPanel(advPanel);
exceptional.addAllToPanel(excPanel);
大概所有的面板都是同一类型的。大概所有的
高级
,异常
等都属于同一类型。除了外观上的,也许还有代码维护,你所拥有的一切都没有问题。如果你想走这条路,Dawid下面的答案是一个不错的选择。但是,您可能只想使用IntelliJ附带的一个像样的GUI设计器。它将为您维护所有的构造函数代码。这就是我所寻找的。谢谢好办法!然而,组件是JComponent还是它们不同?@Raheel138 Component是一个java.awt类,是JComponent的超类。