所以我想在窗口中添加一些文字。
我在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?
答案 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
此外:
答案 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构造一个新对象,在循环之后你只有最新的对象。