我想创建一个嵌套的复选框列表。如果用户检查主项目,则检查所有子项目并进行检查。如果用户检查了一些子项目,则在主项目复选框内出现蓝色方块。
它应该看起来像这样
。Java中的嵌套复选框
我该如何在Java 1.6中做到这一点?我可以使用秋千或任何外部图书馆吗? 我想选择最简单和最快的方式来实现这一目标?我的目标是创建只有1层嵌套。
UPDATE 我想有展开和折叠功能,以及
我想创建一个嵌套的复选框列表。如果用户检查主项目,则检查所有子项目并进行检查。如果用户检查了一些子项目,则在主项目复选框内出现蓝色方块。
它应该看起来像这样
。Java中的嵌套复选框
我该如何在Java 1.6中做到这一点?我可以使用秋千或任何外部图书馆吗? 我想选择最简单和最快的方式来实现这一目标?我的目标是创建只有1层嵌套。
UPDATE 我想有展开和折叠功能,以及
我会用一个JTree的,并与复选框渲染节点。扩展合同的逻辑应由节点监听者处理
1)由于您不需要扩展/折叠复选框,因此您可能不需要树。只需使用首选布局在相应位置的面板中添加复选框即可。
2)构建一个复选框的模型以具有适当的父子关系。
3)添加一个actionListener到你的复选框,并听取检查/取消选中事件。当父母被选中时,检查所有孩子,反之亦然。
示例代码
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JFrame;
import javax.swing.UIManager;
public class NewJPanel extends javax.swing.JPanel {
/** Creates new form NewJPanel */
public NewJPanel() {
initComponents();
}
@SuppressWarnings("unchecked")
private void initComponents() {
jCheckBox1 = new javax.swing.JCheckBox();
jCheckBox2 = new javax.swing.JCheckBox();
jCheckBox3 = new javax.swing.JCheckBox();
jCheckBox1.setText("Tall Things");
jCheckBox1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jCheckBox1ActionPerformed(evt);
}
});
jCheckBox2.setText("Buildings");
jCheckBox3.setText("Giants");
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
this.setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(jCheckBox1)
.addGap(0, 0, Short.MAX_VALUE))
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jCheckBox2)
.addComponent(jCheckBox3))
.addContainerGap(321, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(jCheckBox1)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(jCheckBox2)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(jCheckBox3)
.addGap(0, 232, Short.MAX_VALUE))
);
}
private void jCheckBox1ActionPerformed(java.awt.event.ActionEvent evt) {
jCheckBox2.setSelected(jCheckBox1.isSelected());
jCheckBox3.setSelected(jCheckBox1.isSelected());
}
private javax.swing.JCheckBox jCheckBox1;
private javax.swing.JCheckBox jCheckBox2;
private javax.swing.JCheckBox jCheckBox3;
public static void main(String[] args) {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
JFrame frame = new JFrame();
frame.setSize(new Dimension(400,200));
frame.getContentPane().setLayout(new BorderLayout());
frame.getContentPane().add(new NewJPanel());
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
Dimension frameSize = frame.getSize();
if (frameSize.height > screenSize.height) {
frameSize.height = screenSize.height;
}
if (frameSize.width > screenSize.width) {
frameSize.width = screenSize.width;
}
frame.setLocation((screenSize.width - frameSize.width)/2, (screenSize.height - frameSize.height)/2);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
}
不知道这方面的任何LIB,而是采取ButtonGroup的想法写自己。 – PeterMmm