java如何在JTable 中的第一列加单选按钮(表示选中这一行),并可以动态添加行

java如何在JTable 中的第一列加单选按钮(表示选中这一行),并可以动态添加行,第1张

你要设计的这个单选按钮应该不是说一个表里同时只能选一行吧。。。那你最好还是用checkbox复选框的显示方法替代单选按钮吧。。。因为单选按钮是没有办法点击取消的,一旦选中,就没有办法取消了。。。多蛋疼啊。。。

给你一个复选框的例子吧,一样很好用的。

不多说了,直接上代码:

import java.awt.BorderLayout

import java.awt.Dimension

import java.awt.FlowLayout

import java.awt.Toolkit

import java.awt.event.ActionEvent

import java.awt.event.ActionListener

import javax.swing.JButton

import javax.swing.JFrame

import javax.swing.JPanel

import javax.swing.JScrollPane

import javax.swing.JTable

import javax.swing.table.DefaultTableModel

import javax.swing.table.TableColumn

public class CheckedBoxTabel extends JFrame {

private JTable table

private JScrollPane sPane

private DefaultTableModel model

private JButton button, button2

private JPanel pane

public CheckedBoxTabel() {

// TODO Auto-generated constructor stub

//窗口设置,不用管

this.setSize(400, 400)

Toolkit toolkit = Toolkit.getDefaultToolkit()

Dimension scrnsize

scrnsize = toolkit.getScreenSize()

setLocation(scrnsize.width / 2 - getWidth() / 2, scrnsize.height / 2

- getHeight() / 2)

this.setDefaultCloseOperation(EXIT_ON_CLOSE)

//table的model设置

model = new DefaultTableModel(new Object[][] {}, new String[] { "论文ID",

"论文标题", "是否提交", "论文负责人" })

//table加载model

table = new JTable(model)

//将第三列的显示设为checkbox类型,楼主想设置哪列自己决定

//但是记得该列的值是Boolean型的

TableColumn tc = table.getColumnModel().getColumn(2)

tc.setCellEditor(table.getDefaultEditor(Boolean.class))

tc.setCellRenderer(table.getDefaultRenderer(Boolean.class))

sPane = new JScrollPane()

sPane.setViewportView(table)

//添加增添一行按钮的事件处理

button = new JButton("加一行")

button.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

// TODO Auto-generated method stub

model = (DefaultTableModel) table.getModel()

Object[] data = new Object[4]

data[0] = "1"

data[1] = "论文"

data[2] = new Boolean(false)

data[3] = "张三"

model.addRow(data)

/*

//或者也可以用

model.addRow(new Object[]{"1","论文",new Boolean(false),"张三"})

*/

table.setModel(model)

}

})

//添加显示所选行的按钮的事件处理

button2 = new JButton("显示所选行")

button2.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

// TODO Auto-generated method stub

model = (DefaultTableModel) table.getModel()

int count = model.getRowCount()

for (int i = 0i <counti++) {

if (model.getValueAt(i, 2).equals(true)){

//在这里添加你要处理行的方法

System.out.println("第" + (i + 1) + "行被选中")

}

}

}

})

pane = new JPanel()

pane.setLayout(new FlowLayout())

pane.add(button)

pane.add(button2)

this.add(sPane, BorderLayout.CENTER)

this.add(pane, BorderLayout.SOUTH)

}

public static void main(String[] args) {

new CheckedBoxTabel().setVisible(true)

}

}

我设计的测试结果是在控制台输出的,楼主可以自己修改:

第4行被选中

第7行被选中

第8行被选中

第10行被选中

只有一个简单的单选框,希望对楼主有所帮助。

import java.awt.GridLayout

import java.awt.Panel

import javax.swing.ButtonGroup

import javax.swing.JFrame

import javax.swing.JRadioButton

public class TestJRadiobutton {

public static void main(String[] args) {

new MyFrame()

}

}

class MyFrame extends JFrame {

JRadioButton jrb1

JRadioButton jrb2

JRadioButton jrb3

MyFrame() {

setTitle("TestJRadiobutton")

setBounds(400, 300, 300, 300)

setLayout(new GridLayout(3,1))

jrb1 = new JRadioButton("one", true)

jrb2 = new JRadioButton("two", false)

jrb3 = new JRadioButton("three", false)

add(jrb1) add(jrb2) add(jrb3)

ButtonGroup bg = new ButtonGroup()

bg.add(jrb1)

bg.add(jrb2)

bg.add(jrb3)

setVisible(true)

}

}

你是想是实现,在某一列可以显示时间,  并且点击时间后面的图标可以显示时间选择器,然后选择时间吧..

1,写一个MyModel继承与AbstractTableModel: 用于当数据模型, 填充数据,删除数据等

2,写一个MyRenderer实现TableCellRenderer 主要实现getTableCellRendererComponent方法. 用于返回一个外观,  这就是日期列的渲染器. 可以渲染该列看起来的样子,比如看起来就是一个文本框,里面的文字是xx年xx月xx日

3,写一个MyEditor实现TableCellEditor接口, 也需要重写getTableCellEditorComponent等方法, 这就是日期列的编辑器, 就是当点击日期列时, 处于编辑状态时的状态,显示日期选择器 选择好时间后, 文本框的文字变成了cc年cc月cc日

比如可以把性别列渲染成单选按钮组, 兴趣列渲染成复选框....如下


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/7857048.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-10
下一篇2023-04-10

发表评论

登录后才能评论

评论列表(0条)

    保存