java如何在JTable 中的第一列加单选按钮(表示选中这一行),并可以动态添加行
2个回答
展开全部
你要设计的这个单选按钮应该不是说一个表里同时只能选一行吧。。。那你最好还是用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 = 0; i < count; i++) {
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.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 = 0; i < count; i++) {
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行被选中
展开全部
问题一个个的来解决。
1、单选按钮
至于这个按钮怎么添加需要告诉你么?
获取到每行第一个单元格,然后将这个按钮对象塞进去。
2、选中这一行
你得给单选按钮加1个监听事件,可以单独的加监听,也可以直接给JTable加监听
具体监听里面只需要写一个方法即可
int getSelectedRow() 返回第一个选定行的索引;如果没有选定的行,则返回 -1。
用JTable.getSelectedRow(), 然后 你通过这个行号 去选中行
3、至于动态添加行,这个我不知道你们的需求是怎么样的,但是通常来说,我们一般都添加一个KeyListenser监听,然后通过设置几个按键来实现添加一行记录的
1、单选按钮
至于这个按钮怎么添加需要告诉你么?
获取到每行第一个单元格,然后将这个按钮对象塞进去。
2、选中这一行
你得给单选按钮加1个监听事件,可以单独的加监听,也可以直接给JTable加监听
具体监听里面只需要写一个方法即可
int getSelectedRow() 返回第一个选定行的索引;如果没有选定的行,则返回 -1。
用JTable.getSelectedRow(), 然后 你通过这个行号 去选中行
3、至于动态添加行,这个我不知道你们的需求是怎么样的,但是通常来说,我们一般都添加一个KeyListenser监听,然后通过设置几个按键来实现添加一行记录的
追问
单选按钮怎么加,有相关代码么?动态添加行用DefaultTableModel的addRow方式添加,通过按钮的监听实现,单加不上 单选按钮
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询