2013-06-24 3 views
2

Я разрабатываю настольное приложение, в котором я хочу, чтобы у администратора была возможность удалить пользователей, для которых я планировал, что всякий раз, когда Администратор нажимает кнопку «удалить пользователей», откроется новая вкладка, в которой установлены флажки с должно появиться имя всех существующих пользователей в моей базе данных (чтобы он мог одновременно удалять несколько пользователей); поэтому в основном мне нужно создавать динамические флажки в соответствии с моей базой данных.Динамически генерирует флажки, Netbeans

Я использую Netbeans 7.0.1, jdk 1.6, sqlite3.

После поиска на Google я получил две ссылки, совпадающие с моей проблемой: http://www.coderanch.com/t/345949/GUI/java/create-dynamic-checkboxes#2805277

Creating dcheckbox dynamically in Java-NetBeans

Я пытался следовать код из выше первого звена, но это не работает для меня правильно. То, что я действительно только что создан новый JFrame в NetBeans и называется метод внутри конструктора, которые создают флажков согласно необходимости, код метода является, как показано ниже:

public class Work extends javax.swing.JFrame { 

    /** Creates new form Work */ 
    public Work() { 
     initComponents(); 
     checks = new java.util.ArrayList<>(); 
     createCheckboxes(); 
    } 

    /** This method is called from within the constructor to 
    * initialize the form. 
    * WARNING: Do NOT modify this code. The content of this method is 
    * always regenerated by the Form Editor. 
    */ 
    @SuppressWarnings("unchecked") 
    // <editor-fold defaultstate="collapsed" desc="Generated Code"> 
    private void initComponents() { 

     setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); 

     javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); 
     getContentPane().setLayout(layout); 
     layout.setHorizontalGroup(
      layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGap(0, 400, Short.MAX_VALUE) 
     ); 
     layout.setVerticalGroup(
      layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGap(0, 300, Short.MAX_VALUE) 
     ); 

     pack(); 
    }// </editor-fold> 

    private void createCheckboxes(){ 
     panel = new javax.swing.JPanel(); 
     this.add(panel); 
     for(int i = 0; i<4; i++){ 
      javax.swing.JCheckBox box = new javax.swing.JCheckBox("check"+i); 
      panel.add(box); 
      checks.add(box); 
      panel.revalidate(); 
      panel.repaint(); 
     } 
     panel.setVisible(true); 
     } 

    public static void main(String args[]) { 
     /* Set the Nimbus look and feel */ 
     //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) "> 
     /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel. 
     * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
     */ 
     try { 
      for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) { 
       if ("Nimbus".equals(info.getName())) { 
        javax.swing.UIManager.setLookAndFeel(info.getClassName()); 
        break; 
       } 
      } 
     } catch (ClassNotFoundException ex) { 
      java.util.logging.Logger.getLogger(Work.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } catch (InstantiationException ex) { 
      java.util.logging.Logger.getLogger(Work.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } catch (IllegalAccessException ex) { 
      java.util.logging.Logger.getLogger(Work.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } catch (javax.swing.UnsupportedLookAndFeelException ex) { 
      java.util.logging.Logger.getLogger(Work.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } 
     //</editor-fold> 

     /* Create and display the form */ 
     java.awt.EventQueue.invokeLater(new Runnable() { 

      public void run() { 
       new Work().setVisible(true); 
      } 
     }); 
    } 
    // Variables declaration - do not modify 
    // End of variables declaration 
    private java.util.ArrayList <javax.swing.JCheckBox> checks; 
    private javax.swing.JPanel panel; 
} 

Выход только пустой кадр. Пожалуйста, помогите мне узнать, где я ошибаюсь!

И да, этот код еще не подключен к базе данных, как только он будет работать, я могу изменить его для работы с базой данных.

также их любой другой betterway выполнить свою задачу или я на правильном пути `

ответ

1

Вы добавляете новые галочки, как если ваш кадр использует некоторый простой макет, такие как FlowLayout, но это не так - это используя GroupLayout - см. сгенерированный метод initComponents().

Если вы хотите обрабатывать ВСЕ компоненты в кадре динамически, вы можете сделать это (лучше создать пустой файл класса и затем вставить код ниже: не просите NB создать JFrame, поскольку он снова будет создавать форма будет разработана в визуальном конструкторе, если вы все-таки это сделать, то г-мыши и изменить расположение к чему-то более простому):

public class Work extends javax.swing.JFrame { 
    private java.util.List <javax.swing.JCheckBox> checks = new java.util.ArrayList<>();; 

    public Work() { 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setLayout(new java.awt.FlowLayout()); // simply put the components next to each other 
     createCheckboxes(); 
    } 

    private void createCheckboxes(){ 
     for(int i=0; i<4; i++) { 
      javax.swing.JCheckBox box = new javax.swing.JCheckBox("check"+i); 
      add(box); 
      checks.add(box); 
     } 
     pack(); // this will tell the JFrame's panel to layout all the components 
     } 

    public static void main(String args[]) { 
     java.awt.EventQueue.invokeLater(new Runnable() { 
      public void run() { 
       new Work().setVisible(true); 
      } 
     }); 
    } 
} 

Или вы можете спроектировать часть вашего кадра с визуальным дизайнером, а затем добавьте флажки. В этом случае добавьте пустую панель в конструктор, установите макет панели на что-то вроде макета потока или сетки, а затем добавьте флажки на эту панель из вашего кода так же, как указано выше.

Вы подтверждаете необходимость вызывать, только если панель/рамка уже видна. Calling pack работает даже тогда, но может изменить размер фрейма. Также проверка может быть выполнена после того, как все компоненты были добавлены не после добавления каждого из них.

+0

Спасибо, есть способ динамически добавлять флажки в Jframe, см. ниже. – Shaifali

+0

Я получил это решение после многого поиска, но, по крайней мере, получил его :) – Shaifali

+0

@ user1932362 Да, вы можете динамически добавлять флажки в JFrame, приведенный выше код показывает, но вы должны изменить макет, как я сказал из GroupLayout, что-то еще, если вы хотите использовать простой add (Component). – Jirka

1

Чтобы добавить флажки или любой другой компонент динамически в Netbeans JFrame одной необходимости управлять макет менеджерами, по умолчанию NetBeans кадров использовать Layout Free Design, выполните следующие действия:

Создать пустой JFrame -> Добавить JPanel к нему -> щелкните правой кнопкой мыши на панели, выберите setLayout и измените его на GridLayout.

Теперь мы можем добавлять компоненты муравья на эту панель.

Также не пропустите, чтобы добавить методы revalidate() и repaint().

Это сработало для меня.

+0

Вам нужно вызвать revalidate, только если панель уже видна, в вашем коде вы сделали ее видимой * после * вы добавили флажки. Я бы также назвал revalidate после добавления всех флажков не после добавления каждого из них. – Jirka

2

Я думаю, что это могло бы помочь, если и вызвать следующую функцию когда в хотите создать новый флажок ..

общественный класс CheckBox расширяет JFrame {

//private static final long serialVersionUID = 1L; 
    public CheckBox() { 

     // set flow layout for the frame 
     this.getContentPane().setLayout(new FlowLayout(FlowLayout.TRAILING, 50, 20)); //(default) centered alignment and a default 5-unit horizontal and vertical gap. 

     JCheckBox checkBox1 = new JCheckBox("Checkbox 1"); 
     checkBox1.setSelected(true); 

     JCheckBox checkBox2 = new JCheckBox("Checkbox 2", true); 

     JCheckBox checkBox3 = new JCheckBox("Checkbox 3"); 

     // add checkboxes to frame 

     add(checkBox1); 

     add(checkBox2); 
     add(checkBox3); 

    } 

    private static void createAndShowGUI() { 

     //Create and set up the window. 

     //JFrame frame = new CreateCheckedUncheckedJCheckBox(); 

     CheckBox cb = new CheckBox(); 
     //Display the window. 

     cb.pack(); 



     cb.setVisible(true); 

     cb.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    } 

    public static void main(String[] args) { 

     //Schedule a job for the event-dispatching thread: 

     //creating and showing this application's GUI. 

     javax.swing.SwingUtilities.invokeLater(new Runnable() { 

      @Override 
      public void run() { 

       createAndShowGUI(); 

      } 
     }); 
    } 

}