2015-09-05 64 views
0

我需要一些帮助,我是新来的java,所以可能我将不得不改变很多东西。我有这样的结果:如何用3列(Java)创建Arraylist?

[Goya, Scoop 2000 W, 123] 

如果我尝试添加更多,它会显示:

[HMI, Scoop 2000 W, 123] 
[HMI, Scoop 2000 W, 123, Fresnel, Set light 1000 W De Sisti, 124] 
[HMI, Scoop 2000 W, 123, Fresnel, Set light 1000 W De Sisti, 124, Goya, Set light 1000 W De Sisti, 456] 

而我真正需要的是类似的东西:

[HMI, Scoop 2000 W, 123,] 
[Fresnel, Set light 1000 W De Sisti, 124] 
[Goya, Set light 1000 W De Sisti, 456] 

这里是我的代码:

Component[] componente = painelMain.getComponents(); 
    list = new ArrayList(); 
    for (int i = 0; i < componente.length; i++) { 
     if (componente[i] instanceof JTextField) { 
      JTextField textfield = (JTextField) componente[i]; 
      if (!"".equals(textfield.getText())) { 
       list.add(textfield.getText()); 
       System.out.println(list); 
      } 
     } else if (componente[i] instanceof JComboBox) { 
      JComboBox combo = (JComboBox) componente[i]; 
      if (!"".equals(combo.getSelectedItem())) { 
       list.add(combo.getSelectedItem()); 
      } 
     } 
    } 
} 
+1

他想要一个矩阵而不是一个简单的列表 – Dici

+0

这听起来像你应该创建一个新的类型来表示这三个值的组合......(我们现在还不能确切地说出他们此刻的含义......) –

回答

2

你想要的是一个矩阵。您可以使用String[][]类型的数组或List<List<String>>类型的列表。我也简化了你的代码(使用泛型,分解逻辑),但是所有这些类型和intanceof都可能是你应该改进的糟糕设计的标志。

Component[] components = painelMain.getComponents(); 
List<List<String> list = new ArrayList<>(); 
List<String> line; 

int i = 0, numCols = 3; 
for (Component component : components) { 
    if (i % numCols == 0) { 
     line = new ArrayList<>(); 
     list.add(line); 
    } 
    String content = ""; 
    if (component instanceof JTextField) { 
     content = ((JTextField) component).getText();    
    } else if (component instanceof JComboBox) { 
     content = ((JComboBox<String>) component).getSelectedItem(); 
    } 

    if (!content.isEmpty()) { 
     line.add(content); 
    } 
    i = (i + 1) % 3; 
} 

这里有一个边缘情况下,如果其中一个字符串变成空的,我不知道你想怎么处理它。