所以,至少有三个基本问题......
一...
你只有一次组件,所以当你做这样的事情...
JLabel num = new JLabel();
for (int i = 0; i < a.length; i++)
{
num.setText((String.valueOf(a[i]));
num.setLocation(20*i, 20);
contentPane.add(num);
}
你只是在设置属性已经存在的组件,并尝试添加到它已经驻留的容器中,所以只有一个组件。
两个
你永远不设置JLabel
的大小,因为你已经决定使用null
布局,则成为负责做这个
三
您的来电setVisible
在UI完成设置之前的帧。虽然可以这样做,但在显示帧之前建立UI更容易,因为它可以减少其他问题。如果你想将组件添加到以动态方式的框架,你需要调用revalidate
和repaint
已将其添加到
例如,容器上...
现在,考虑所有的考虑,你可以做更多的东西像这样...
import java.awt.Color;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.border.EmptyBorder;
public class Test {
public static void main(String[] args) {
new Test();
}
public Test() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
ex.printStackTrace();
}
JFrame frame = new JFrame("Testing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel contentPane = new JPanel();
contentPane.setBackground(Color.WHITE);
frame.setContentPane(contentPane);
int a[] = new int[5];
a[0] = 10;
a[1] = 20;
a[2] = 70;
a[3] = 40;
a[4] = 50;
for (int i = 0; i < a.length; i++) {
JLabel num = new JLabel((String.valueOf(a[i])));
num.setBorder(new EmptyBorder(0, 20, 0, 0));
contentPane.add(num);
}
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
}
注:我不喜欢,我也不纵容,利用null
布局,为所有时代人们“认为”他们需要,他们不是
如果列出可变数量的组件,您可能会发现使用更实用的JList
,因为它支持垂直和水平环绕和滚动
提示:请查看[数组文字](http:// cs-fundamentals .com/tech-interview/java/java-array-literals.php)在编译时创建数组时已知。这只是更好的语法。 – byxor
在添加完所有内容之后,在框架上调用'setVisible' – MadProgrammer