public class CheckBoxList extends JList {
public CheckBoxList(){
super();
initCheckBox();
}
public CheckBoxList(final Vector<?> listData){
super(listData);
initCheckBox();
}
public CheckBoxList(final Object[] listData){
super(listData);
initCheckBox();
}
public CheckBoxList(ListModel dataModel){
super(dataModel);
initCheckBox();
}
private void initCheckBox() {
this.setCellRenderer(new CheckBoxRenderer());
this.setUI(new CheckBoxListUI());
}
class CheckBoxRenderer extends JCheckBox implements ListCellRenderer {
public Component getListCellRendererComponent(
JList list,
Object value,
int index,
boolean isSelected,
boolean cellHasFocus) {
this.setSelected(isSelected);
this.setText(value.toString());
return this;
}
}
class CheckBoxListUI extends BasicListUI implements MouseInputListener {
protected MouseInputListener createMouseInputListener() {
return this;
}
public void mouseClicked(MouseEvent e) {
}
public void mousePressed(MouseEvent e) {
int row = CheckBoxList.this.locationToIndex(e.getPoint());
boolean temp = CheckBoxList.this.getSelectionModel().isSelectedIndex(row);
if (!temp) {
CheckBoxList.this.addSelectionInterval(row, row);
} else {
CheckBoxList.this.removeSelectionInterval(row,row);
}
}
public void mouseReleased(MouseEvent e) {
}
public void mouseEntered(MouseEvent e) {
}
public void mouseExited(MouseEvent e) {
}
public void mouseDragged(MouseEvent e) {
}
public void mouseMoved(MouseEvent e) {
}
}
}短短几行就变成了CheckBoxList了
这就是swing的灵活性
public CheckBoxList(){
super();
initCheckBox();
}
public CheckBoxList(final Vector<?> listData){
super(listData);
initCheckBox();
}
public CheckBoxList(final Object[] listData){
super(listData);
initCheckBox();
}
public CheckBoxList(ListModel dataModel){
super(dataModel);
initCheckBox();
}
private void initCheckBox() {
this.setCellRenderer(new CheckBoxRenderer());
this.setUI(new CheckBoxListUI());
}
class CheckBoxRenderer extends JCheckBox implements ListCellRenderer {
public Component getListCellRendererComponent(
JList list,
Object value,
int index,
boolean isSelected,
boolean cellHasFocus) {
this.setSelected(isSelected);
this.setText(value.toString());
return this;
}
}
class CheckBoxListUI extends BasicListUI implements MouseInputListener {
protected MouseInputListener createMouseInputListener() {
return this;
}
public void mouseClicked(MouseEvent e) {
}
public void mousePressed(MouseEvent e) {
int row = CheckBoxList.this.locationToIndex(e.getPoint());
boolean temp = CheckBoxList.this.getSelectionModel().isSelectedIndex(row);
if (!temp) {
CheckBoxList.this.addSelectionInterval(row, row);
} else {
CheckBoxList.this.removeSelectionInterval(row,row);
}
}
public void mouseReleased(MouseEvent e) {
}
public void mouseEntered(MouseEvent e) {
}
public void mouseExited(MouseEvent e) {
}
public void mouseDragged(MouseEvent e) {
}
public void mouseMoved(MouseEvent e) {
}
}
}短短几行就变成了CheckBoxList了
这就是swing的灵活性
public static void main(String[] args) {
Box p = Box.createVerticalBox();
for (int i = 0; i < 10; i++) {
p.add(new JCheckBox("Item" + (i+1)));
}
JFrame f = new JFrame();
f.getContentPane().add(new JScrollPane(p), BorderLayout.CENTER);
f.pack();
f.setLocationRelativeTo(null);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
}
}
--------------------
什么程序这么BT,需要那么多checkbox啊?
我也认为这可以成为一个组件.会有用处的.
但是这还没有办法很好的证明Swing什么,我只是想到我的SDK.PS:还有一点不好,你怎么不散点分啊?
"No enclosing instance of the type CheckBoxList is accessible in scope"
不如直接在List上添加MouseListener更简单....而且renderer里面的isSelected是item有没有被选择, 和CheckBox是不是isSelected不是一个概念吧?