`

在JList或者JTable的中加入checkbox

 
阅读更多

public class RadioButtonPanel extends JPanel {
JRadioButton[] buttons;

RadioButtonPanel(String[] str) {
setLayout(new BoxLayout(this, BoxLayout.X_AXIS));
buttons = new JRadioButton[str.length];
for (int i=0; i<buttons.length; i++) {
buttons[i] = new JRadioButton(str[i]);
buttons[i].setFocusPainted(false);
add(buttons[i]);
}
}

public void setSelectedIndex(int index) {
for (int i=0;i<buttons.length;i++) {
buttons[i].setSelected(i == index);
}
}

public int getSelectedIndex() {
for (int i=0; i<buttons.length; i++) {
if (buttons[i].isSelected()) {
return i;
}
}
return -1;
}

public JRadioButton[] getButtons() {
return buttons;
}
}

public class RadioButtonRenderer extends RadioButtonPanel
implements TableCellRenderer {
RadioButtonRenderer(String[] strs) {
super(strs);
}

public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
if (value instanceof Integer) {
setSelectedIndex(((Integer)value).intValue());
}
return this;
}
}

public class RadioButtonEditor extends DefaultCellEditor
implements ItemListener {
RadioButtonPanel panel;

public RadioButtonEditor(JCheckBox checkBox,RadioButtonPanel panel) {
super(checkBox);
this.panel = panel;
ButtonGroup buttonGroup = new ButtonGroup();
JRadioButton[] buttons = panel.getButtons();
for (int i=0; i<buttons.length; i++) {
buttonGroup.add(buttons[i]);
buttons[i].addItemListener(this);
}
}

public Component getTableCellEditorComponent(JTable table, Object value,
boolean isSelected, int row, int column) {
if (value instanceof Integer) {
panel.setSelectedIndex(((Integer)value).intValue());
}
return panel;
}

public Object getCellEditorValue() {
return new Integer(panel.getSelectedIndex());
}

public void itemStateChanged(ItemEvent e) {
super.fireEditingStopped();
}
}

在程序中加入以上类
然后在你的Table类中加入一下方法:
public void setCloumnToRadioButton(Object cloumnName, String[] selections) {
getColumn(cloumnName).setCellRenderer(
new RadioButtonRenderer(selections)
);
getColumn(cloumnName).setCellEditor(
new RadioButtonEditor(new JCheckBox(),
new RadioButtonPanel(selections))
);
}

这是RadioButton的代码,不过吗CheckBox差不多了。

分享到:
评论

相关推荐

    java图形界面编程

    1. Swing组件:Swing组件包括JButton、JLabel、JTextField、JTextArea、JCheckBox、JRadioButton、JComboBox、JList、JTable、JTree、JPanels等。Swing还引入了JFrame、JDialog、JOptionPane等窗口类。 2. 复杂组件...

    swing实例仿window

    在这个"Swing实例仿window"的项目中,我们主要关注的是如何利用Swing来模拟Windows操作系统的常见用户界面元素,如菜单、滚动条、表格、树形视图以及滑动门效果。以下是对这些知识点的详细讲解: 1. **菜单(Menu)...

    java控件的一些基本代码

    Java的`JScrollPane`类包含了水平和垂直滚动条,可以应用于`JTextArea`, `JList`, `JTable`等组件。以下是一个简单的例子: ```java import javax.swing.*; public class ScrollbarDemo { public static void ...

    java第十二章GUI编程

    6. `JTable`、`JList`、`JTree`:用于展示表格、列表和树状数据结构的组件。 7. `JScrollPane`:用来包裹组件,提供滚动条功能。 8. `JTabbedPane`:分页组件,可以将多个组件放在不同的页面中。 事件处理是GUI编程...

    java图形设计资料

    Java图形设计是Java编程语言中的一个重要领域,它涵盖了如何在Java应用程序中创建和操作图形用户界面(GUI)以及实现复杂的视觉效果。这份“java图形设计资料”提供了丰富的学习资源,包括两部分:Java 2 图形设计卷...

    Java图像编程实例库

    JLabel用于显示文本或图像,JTextArea则适合多行文本输入,JTable用于展示表格数据,而JTree和JList则用于呈现树形和列表结构。 3. **Java2D API**: Java2D是一个高级的图形渲染引擎,可以用来进行更复杂的图形操作...

    详细的java控件大全

    4. CheckBox和RadioButton:与Swing中的复选框和单选按钮相当,但JavaFX的样式更加灵活。 5. ComboBox:下拉列表,JavaFX支持动态加载和过滤选项。 6. ListView、TreeView和TableView:类似于Swing的列表和表格,但...

    Prob9-Checking-which-Items-are-Selected

    在Swing中,`JCheckBox`用于复选框,`JRadioButton`用于单选按钮,`JList`或`JTable`则可以用于显示多个可选择的项目。JavaFX提供了类似的组件,如`CheckBox`、`RadioButton`和`ListView`。你需要监听这些组件的事件...

    java2图形设计卷

    - **AWT组件**:AWT中的组件包括Window、Frame、Dialog、Button、Label、TextField、TextArea、Checkbox、Choice、List等。每个组件都有特定的功能和用法,例如,Frame是顶级容器,用于显示其他组件,Button则用于...

    GUI.rar_Java编程_Java_

    在Java中,我们可以使用Java AWT(Abstract Window Toolkit)和Swing库来构建GUI。 1. Java AWT:AWT是Java早期提供的GUI库,它依赖于操作系统的本地窗口系统。AWT组件包括基本的窗口、按钮、文本框等,但它们的...

Global site tag (gtag.js) - Google Analytics