在java中动态添加复选框

时间:2016-04-29 15:21:16

标签: java mysql checkbox

我想知道如何动态添加checkboxes和名称。

enter image description here

checkboxes的数量跟随MySQL中的行数,并且从MySQL检索名称。假设我在MySQL中有三个数据,所以我将输出为上图。

这是我的A类代码

checkAPI api= new checkAPI();

try 
{
    num = api.displayCheckBoxAndLabel(); //  get 3
    List<String> allName= api.displayName(); // [John,Tony,Kik]
} 
catch (Exception e1) 
{
    // TODO Auto-generated catch block
    e1.printStackTrace();
                            }    
    deleteAdmin delete = new deleteAdmin(num,allName);
    delete.setVisible(true);
    setVisible(false);
    dispose();
} 

然后将两个参数传递给class deleteAdmin

public class deleteAdmin  extends JFrame {

    private JPanel contentPane;
    private JTextField userText;
    private JTextField txtpassword;
    JFrame f= new JFrame(" Add Admin");

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    button frame = new button();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    public deleteAdmin(int num, List<String> names)
    {
        super("Delete Admin");
        setBounds(100, 200, 340, 229);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(null);

        JPanel panel = new JPanel();
        panel.setBounds(35, 19, 242, 146);
        contentPane.add(panel);
        panel.setLayout(null);

        JCheckBox[] checkBoxList = new JCheckBox[num];

        for(int i = 0; i < num; i++) {
            checkBoxList[i] = new JCheckBox("CheckBox" + i);
            contentPane.add(checkBoxList[i]);
        }
    }
}

然而,我得到了这种输出。没有显示的复选框:(

enter image description here

1 个答案:

答案 0 :(得分:0)

快速查看代码中至少有两个可能的奇怪之处。

  1. 如果您没有为面板使用layout manager,则必须明确调整组件的大小和位置。
  2. 在事件派发线程上创建和操作 必须 >。所以如果你的代码

    deleteAdmin delete= new deleteAdmin(num,allName);
    delete.setVisible(true);
    setVisible(false);
    dispose();
    

    在EDT中运行,因为它位于某个按钮处理程序内部或类似于没有问题,否则您需要使用invokeLater()来执行此操作。