示範如何使用陣列管理多個 JCheckBox 元件:以字串陣列定義標籤文字,建立對應的 JCheckBox[],透過 GridLayout(0, 4)(4 欄、列數自動)自動排版於 JPanel,最後置於視窗中央區域。
import java.awt.*;
import javax.swing.*;
public class CheckBoxArrayDemo extends JFrame {
public CheckBoxArrayDemo() {
setTitle("複選框陣列示範");
setDefaultCloseOperation(EXIT_ON_CLOSE);
setBounds(100, 100, 420, 350);
setLayout(new BorderLayout(10,10));
JLabel title = new JLabel("你的興趣愛好:");
add(title, BorderLayout.NORTH);
JPanel panel = new JPanel(new GridLayout(0, 4, 5, 5)); // 4 欄,間距 5px
String[] labels = {
"足球", "籃球", "魔術", "乒乓球", "看電影", "魔獸世界", "CS戰隊",
"羽毛球", "游泳", "旅遊", "爬山", "唱歌", "寫部落格", "動物世界", "拍照", "彈吉他",
"讀報紙", "飆車", "逛街", "逛商場", "麻將", "看書", "上網看資料", "新聞", "軍事",
"八卦", "養生", "飲茶"
};
JCheckBox[] boxes = new JCheckBox[labels.length];
for (int i = 0; i < labels.length; i++) {
boxes[i] = new JCheckBox(labels[i]);
panel.add(boxes[i]);
}
add(new JScrollPane(panel), BorderLayout.CENTER); // 內容過多時可捲動
setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(CheckBoxArrayDemo::new);
}
}
GridLayout(0, 4):行數為 0 表示由佈局管理器自動計算,固定 4 欄。boxes 持有所有複選框引用,後續可遍歷取得勾選狀態(如 boxes[i].isSelected())。JScrollPane 確保選項過多時仍可完整顯示。Nimbus 外觀(可選)提升視覺一致性。List<String> selected = Arrays.stream(boxes).filter(JCheckBox::isSelected).map(JCheckBox::getText).toList();DefaultListModel + JList 或 JPanel + revalidate()/repaint() 實現執行時期增減選項。ActionListener 即時更新後端模型。