所以,至少有三個基本問題......
一...
你只有一次組件,所以當你做這樣的事情...
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