我正在开发一个桌面应用程序,我希望管理员可以选择删除用户,我计划每当管理员点击“删除用户”按钮时,将打开一个新选项卡,其中包含所有现有用户名称的复选框在我的数据库中应该出现(以便他可以同时删除多个用户);所以基本上我需要根据我的数据库生成动态复选框。
我正在使用Netbeans 7.0.1,jdk 1.6,sqlite3。
在谷歌搜索后,我得到了两个与我的问题相符的链接: http://www.coderanch.com/t/345949/GUI/java/create-dynamic-checkboxes#2805277
Creating dcheckbox dynamically in Java-NetBeans
我曾尝试按照上面第一个链接的代码进行操作,但这对我来说并不适用。我所做的只是在netbeans中创建新的JFrame,并在构造函数中调用一个方法,根据需要创建复选框,方法的代码如下:
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;
}
输出只是一个空白帧。请帮我知道我哪里错!
是的,这个代码还没有连接到数据库,一旦它可以工作,那么我可以修改它以使用数据库。
他们还有什么其他更好的方法可以完成我的任务,或者是在正确的道路上?“
答案 0 :(得分: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();
}
});
}
}
答案 1 :(得分: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);
}
});
}
}
或者您可以使用可视化设计器设计部分框架,然后添加复选框。在这种情况下,在设计器中添加一个空面板,将面板的布局设置为类似于流或网格布局的内容,然后以与上面相同的方式从代码中将复选框添加到该面板。
只有在面板/框架已经可见时,才能验证是否需要调用。即使在那时调用包工作,但可能会改变帧的大小。在添加所有组件之后,也可以在添加每个组件之后进行验证。
答案 2 :(得分:1)
要在Netbeans JFrame中动态添加复选框或任何其他组件,需要管理布局管理器,默认情况下netbeans框架使用免费设计布局,请按照以下步骤操作:
创建空白JFrame - &gt;向其添加Jpanel - &gt;右键单击面板,选择setLayout并将其更改为GridLayout。
现在我们可以在此面板上自由添加ant组件。
也不要forgate添加revalidate()和repaint()方法。
这对我有用。