2016-04-29 81 views
1

我想知道如何动态添加checkboxes和名称。在java中动态添加复选框

enter image description here

checkboxes数量是跟随行的MySQL数量和名称从MySQL检索。假设我有三个数据在MySQL,所以我会得到上面的图像输出。

这是我课程代码

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

不过,我得到这样的输出。不显示任何复选框:(

enter image description here

+1

使用空布局:'contentPane.setLayout(null)',您必须为组件提供大小和位置,使用'setBounds'。 – Berger

+0

@Berger因为它们是动态添加的,我怎样才能为每个'checkboxes'设置'setBounds'? –

+0

你可以在'for'循环中做到这一点,并根据'i'值选择它们的位置。 – Berger

回答

0

从快看有你的代码至少有两个可能的怪事。

  1. 如果你不使用你的面板一layout manager,你必须大小并明确将您的组件。
  2. Swing组件必须创建和事件派发线程操作专门。所以我˚F代码

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

    运行在EDT,因为它是一些按钮处理程序内或喜欢,这是确定的,否则你需要使用invokeLater()做到这一点的东西。