将ArrayList中的每个元素添加到JFrame

时间:2014-02-02 16:44:06

标签: java swing arraylist

所以我想在窗口中添加一些文字。

我在ArraList中添加了这样的文字:

ArrayList<String> Text = new ArrayList<String>();
Text.add("text1");
Text.add("text2");
...
Text.add("text*n*");

我现在想将这些项添加到JFrame中。现在,我对编程很陌生,所以可能有一个更好的解决方案。但这是我尝试的(我使用for循环,因为我认为这也是我管理标签边界的最简单方法:

for(int i = 0; i<Text.size();i++){
    JLabel jl = new JLabel(names.get(i));

    jl.setBounds(50,100+20*i,200,50);
    this.add(jl);

}

但只有ArrayList中的最后一个元素被添加到JFrame(text * n *)。不是所有的人。 如何让arraylist中的每个元素都显示在jframe中?也许我不应该使用JFrame?

5 个答案:

答案 0 :(得分:3)

听起来你想要使用JList,而不是JLabel的网格。

即,

DefaultListModel<String> listModel = new DefaultListModel<String>();
JList<String> myJList = new JList<String>(listModel);

// assuming you have an array of String or ArrayList<String> called texts
for (String text : texts) {
  listModel.addElement(text);
}

JScrollPane listScrollPane = new JScrollPane(myJList);

// then add the listScrollPane to your GUI

此外:

  • 请学习并遵循Java命名规则。变量名称应以小写字母开头,因此“text”不是Text。
  • 你应该知道,每当有人使用空布局和setBounds(...)时,小狗就会死亡。请不要对小狗残忍,也不要制造难以维护和升级的GUI。学习和使用Swing布局管理器。你不会后悔,小狗也不会后悔。

答案 1 :(得分:2)

您需要一个布局,否则它们会相互叠加。尝试将所有内容添加到JPanel,并仅在最后将面板添加到框架中。

JFrame frame = new JFrame("title");
JPanel panel = new JPanel();
// Y_AXIS means each component added will be added vertically
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));

for (String str : Text) {
   JLabel j1 = new JLabel(str);
   panel.add(j1);
}

frame.add(panel);
frame.pack();
frame.setVisible(true);

答案 2 :(得分:0)

尝试将names.get(i)替换为Text.get(i)

或尝试,

for(String str : Text){
    JLabel jl = new JLabel(str);
}

答案 3 :(得分:0)

试试这个:

String output = "";
for(int i = 0; i<Text.size();i++)
{
    output += Text.get[i] + "\n";

}
JLabel jl = new JLabel(output);

这将创建一个名为output的字符串,它将添加每个索引中的文本,然后创建一个新行。然后在最后,完整的字符串将添加到JLabel。这种方法唯一的缺点是一个标签将包含所有文本。

答案 4 :(得分:0)

JLabel jl = new JLabel(names.get(i));

这里总是为j1构造一个新对象,在循环之后你只有最新的对象。