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

java - 在Java中动态添加复选框-LMLPHP

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();
}


然后将两个参数传递给类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]);
        }
    }
}


但是,我得到了这种输出。没有显示复选框:(

java - 在Java中动态添加复选框-LMLPHP

最佳答案

快速浏览一下,您的代码中至少有两个奇怪的地方。


如果您的面板未使用layout manager,则必须明确调整尺寸并放置组件。
必须在事件分配线程上专门创建和操作Swing组件。所以如果你的代码

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


在EDT中运行,因为它位于某个按钮处理程序内,或者可以正常运行,否则,您需要使用invokeLater()进行操作。

10-04 10:53
查看更多