java awt jtable 复选框_java swing 添加 jcheckbox复选框

这篇博客介绍如何在Java Swing的JTable中添加复选框。通过使用DefaultTableModel和自定义的TableCellRenderer,博主展示了两种方法来实现表格中某一列显示复选框,并且提供了按钮点击时展示选中项的示例代码。
摘要由CSDN通过智能技术生成

1 importjava.awt.Component;2 2 importjava.awt.event.ActionEvent;3 3 importjava.awt.event.ActionListener;4 4

5 5 import javax.swing.*;6 6 import javax.swing.table.*;7 7

8 8

9 9 public class MyFirstJFrame extendsJFrame {10 10

11 11 //作为测试的main方法

12 12 public static voidmain(String[] args) {13 13 new MyFirstJFrame().setVisible(true);14 14}15 15

16 16 /**

17 17 * 构造方法18 18*/

19 19 publicMyFirstJFrame() {20 20InitialComponent();21 21}22 22

23 23 /**

24 24 * 初始化组件的方法25 25*/

26 26 private voidInitialComponent(){27 27 //设置窗体参数

28 28

29 29 //设置布局模式

30 30 setLayout(null);31 31 //设置窗体大小

32 32 setSize(480, 360);33 33 //设置窗体居中(非常规方法)

34 34 setLocationRelativeTo(null);35 35 //关闭窗体退出程序

36 36setDefaultCloseOperation(DISPOSE_ON_CLOSE);37 37

38 38 //初始化面板

39 39 panel = newJPanel();40 40 panel.setSize(this.getWidth(), this.getHeight());41 41 panel.setLocation(0,0);42 42 panel.setLayout(null);43 43

44 44 //初始化表格

45 45 table = new JTable(new DefaultTableModel(new Object[][]{{"第一行"},{"第二行"},{"第三行"},{"第四行"}}, new String[]{"测试行1","测试行2"}){46 46 /*(non-Javadoc)47 47 * 重写方法,判断表单元格是否可编辑48 48 * 可以通过row和column索引判断某一个单元格是否可编辑49 49 * 此处设为都不可编辑50 50 * @see javax.swing.table.DefaultTableModel#isCellEditable(int, int)51 51*/

52 52@Override53 53 public boolean isCellEditable(int row, intcolumn) {54 54 return false;55 55}56 56});57 57

58 58 //开始向表格中添加复选框(注意:此示例较为简单,缺省很多判断,也没有动态代码支持)

59 59 //通过设置列渲染

60 60

61 61 //方法一:直接方式 使用TableColumn的setCellRenderer方法(推荐)

62 62 //此方法可以设置某一列的渲染(即使用某一个组件--即控件来显示单元格数据)

63 63 table.getColumnModel().getColumn(1).setCellRenderer(newTableCellRenderer(){64 64

65 65 /*(non-Javadoc)66 66 * 此方法用于向方法调用者返回某一单元格的渲染器(即显示数据的组建--或控件)67 67 * 可以为JCheckBox JComboBox JTextArea 等68 68 * @see javax.swing.table.TableCellRenderer#getTableCellRendererComponent(javax.swing.JTable, java.lang.Object, boolean, boolean, int, int)69 69*/

70 70@Override71 71 publicComponent getTableCellRendererComponent(JTable table,72 72 Object value, boolean isSelected, booleanhasFocus,73 73 int row, intcolumn) {74 74 //创建用于返回的渲染组件

75 75 JCheckBox ck = newJCheckBox();76 76 //使具有焦点的行对应的复选框选中

77 77ck.setSelected(isSelected);78 //设置背景颜色 这里是设置jcheckbox的背景颜色 直接设置为透明,我这里是用了一种明暗交替的颜色转换,所以背景颜色设置了一下

79 ck.setOpaque(false);80 78 //设置单选box.setSelected(hasFocus);

81 79 //使复选框在单元格内居中显示

82 80 ck.setHorizontalAlignment((int) 0.5f);83 81 returnck;84 82}});85 83

86 84 //方法二:先设置列编辑器,然后设置单元格渲染

87 85 //设置列编辑器

88 86 //在以复选框为对象设置列编辑器时,必须保证该列能够被编辑,否则无法更改状态

89 87 //(此步骤可以省略,省略时不要忘记将列设为不可编辑)

90 88 //table.getColumnModel().getColumn(1).setCellEditor(new DefaultCellEditor(new JCheckBox()));

91 89

92 90 //设置单元格渲染(这里是设置表格级别的渲染)

93 91 /*table.setDefaultRenderer(Object.class, new TableCellRenderer(){94 9295 93 @Override96 94 public Component getTableCellRendererComponent(JTable table,97 95 Object value, boolean isSelected, boolean hasFocus,98 96 int row, int column) {99 97 // 判断是否为需要渲染的列100 98 if(column == 1){101 99 // 和方法一基本一致102 100 JCheckBox box = new JCheckBox();103 101 box.setSelected(isSelected);104 102 // 设置单选box.setSelected(hasFocus);105 103 box.setHorizontalAlignment((int) CENTER_ALIGNMENT); // 0.5f106 104 return box;107 105 }108 106 // 如果不是需要渲染的列,封装文本域显示数据109 107 return new JTextArea(value.toString());110 108 }});*/

111 109

112 110 //在多选是需要按住Ctrl键或者鼠标按住拖过连续的需要选中的行,应该给用户说明

113 111 //第一种方法是被推荐的,因为它具有选中的高亮显示,界面能更加友好

114 112 table.setSize(panel.getWidth(),panel.getHeight() - 90);115 113 table.setLocation(0, 0);116 114

117 115

118 116 btn = new JButton("Test");119 117 btn.setSize(80,40);120 118 btn.setLocation((panel.getWidth()) / 2 - 40, panel.getHeight() - 80);121 119

122 120 //按钮点击时显示当前选中项

123 121 btn.addActionListener(newActionListener(){124 122

125 123@Override126 124 public voidactionPerformed(ActionEvent e) {127 125 for(introwindex : table.getSelectedRows()){128 126 JOptionPane.showMessageDialog(null, rowindex + " " + table.getValueAt(rowindex, 0));129 127}130 128}});131 129

132 130panel.add(table);133 131panel.add(btn);134 132 this.add(panel);135 133

136 134}137 135

138 136 //定义一些必要的组件

139 137 privateJPanel panel;140 138 privateJTable table;141 139 privateJButton btn;142 140 }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在JTree添加带有复选框的节点,可以使用JCheckBoxTree。JCheckBoxTree是一个自定义的Swing组件,它继承了JTree并添加复选框功能。 以下是一个简单的示例,演示如何使用JCheckBoxTree: ```java import java.awt.BorderLayout; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.DefaultTreeModel; public class CheckBoxTreeExample extends JFrame { private JCheckBoxTree checkBoxTree; public CheckBoxTreeExample() { super("JCheckBoxTree Example"); // 创建根节点 DefaultMutableTreeNode root = new DefaultMutableTreeNode("Root"); // 创建子节点 DefaultMutableTreeNode node1 = new DefaultMutableTreeNode("Node 1"); DefaultMutableTreeNode node2 = new DefaultMutableTreeNode("Node 2"); DefaultMutableTreeNode node3 = new DefaultMutableTreeNode("Node 3"); // 将子节点添加到根节点 root.add(node1); root.add(node2); root.add(node3); // 创建复选框树 checkBoxTree = new JCheckBoxTree(new DefaultTreeModel(root)); // 将复选框添加到窗口 add(new JScrollPane(checkBoxTree), BorderLayout.CENTER); // 设置窗口大小和位置 setSize(300, 400); setLocationRelativeTo(null); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setVisible(true); } public static void main(String[] args) { new CheckBoxTreeExample(); } } ``` 在这个示例,我们创建了一个根节点和3个子节点,并将它们添加到根节点。然后,我们使用JCheckBoxTree构造函数创建了一个复选框树,并将其添加到窗口。最后,我们设置了窗口的大小和位置,并将其设置为可见。 注意,JCheckBoxTree是一个自定义组件,您需要将其添加到您的项目才能使用。您可以从互联网上下载可用的库或自己编写代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值