在 Java Swing 開發中,當需要動態產生大量核取方塊時,逐一撰寫程式碼不僅繁瑣,也難以維護。本文示範如何結合 JCheckBox 陣列與 GridLayout 版面管理器,以迴圈方式快速建立並排版多組核取方塊,適合用於興趣選擇、問卷調查等場合。
JPanel 面板物件,作為容器。GridLayout(0, 4) 設定四欄、列數自動調整的網格版面。labels 儲存每個核取方塊的顯示文字。JCheckBox[] 陣列對應上述文字。for 迴圈遍歷陣列,逐一實例化 JCheckBox 並加入面板。package cn.edu.xidian.crytoll;
import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.GridLayout;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JLabel;
import javax.swing.UIManager;
public class CheckBoxArray extends JFrame {
private static final long serialVersionUID = -5338362310060106193L;
private JPanel contentPane;
private JPanel panel;
public static void main(String[] args) {
try {
UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
} catch (Throwable e) {
e.printStackTrace();
}
EventQueue.invokeLater(() -> {
try {
CheckBoxArray frame = new CheckBoxArray();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
});
}
public CheckBoxArray() {
setTitle("利用核取方塊陣列批量新增核取方塊");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 409, 331);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
contentPane.setLayout(new BorderLayout(0, 0));
setContentPane(contentPane);
JLabel label = new JLabel("你的喜好有哪些:");
contentPane.add(label, BorderLayout.NORTH);
contentPane.add(getPanel(), BorderLayout.CENTER);
}
private JPanel getPanel() {
if (panel == null) {
panel = new JPanel();
panel.setLayout(new GridLayout(0, 4)); // 四欄,列數自動
String[] labels = {
"足球", "籃球", "魔術", "乒乓球", "看電影", "魔獸世界", "CS戰隊",
"羽毛球", "游泳", "旅遊", "登山", "唱歌", "寫部落格", "植物世界", "攝影", "彈吉他",
"讀報紙", "飆車", "逛街", "逛商場", "麻將", "看書", "上網看資料", "消息", "軍事",
"八卦", "攝生", "吃茶品茗"
};
JCheckBox[] boxes = new JCheckBox[labels.length];
for (int i = 0; i < boxes.length; i++) {
boxes[i] = new JCheckBox(labels[i]);
panel.add(boxes[i]);
}
}
return panel;
}
}
程式啟動後會顯示一個視窗,上方為提示標籤,下方以四欄網格整齊排列 28 個核取方塊,涵蓋運動、娛樂、休閒等多樣化選項。使用者可任意勾選,介面清晰且易於擴充。
boxes 陣列檢查 isSelected()。ActionListener 即時回應使用者操作。labels 陣列即可,無需修改 UI 邏輯。