java JTable怎么设置列的位置不可java 拖动控件

1118人阅读
Java(23)
要使单元格不能被编辑,重写tableModel里面的isCellEditable即可,例如:
String[] strs = { "学号", "姓名", "性别", "年龄", "地址" };
DefaultTableModel dtm = new DefaultTableModel(strs, 0){
public boolean isCellEditable(int row, int column) {
return false;
要使数据居中对齐:
DefaultTableCellRenderer
DefaultTableCellRenderer()
r.setHorizontalAlignment(JLabel.CENTER)
table.setDefaultRenderer(Object.class,
为你JTABLE 的实例对象
隐藏JTable中的某一列:
//把第一列隐藏掉
DefaultTableColumnModel dcm = (DefaultTableColumnModel)table .getColumnModel()
dcm.getColumn(0).setMinWidth(0)
dcm.getColumn(0).setMaxWidth(0)
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:63612次
积分:1413
积分:1413
排名:千里之外
原创:76篇
评论:16条
(5)(6)(5)(9)(1)(4)(7)(8)(4)(5)(1)(2)(6)(11)(7)[转载]如何让Jtable不可编辑?
GUI编程,从mysql中获取的数据需要放到JTable中!如何控制JTable各行各列能被选择,但是单元格中的内容不被修改?
昨天晚上仔细研究了一下,发现针对此问题,网上有很多回答有不当之处,估计大多是copy来copy去,自己并没有进行测试!
JTable类下有一个子类:DefaultTableModel。
DefaultTableModel类有一个方法:isCellEditable,该方法可使JTable能被选但不能被编辑。具体示例如下:
static DefaultTableModel tableM
static JTable jT
tableModel = new DefaultTableModel();
jTable=new JTable(tableModel){
&&&&&&&&&&&&
public boolean isCellEditable(int row, int column)
&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&
}//表格不允许被编辑
&&&&&&&&&&&&&&&&&
这个代码是使整个JTable不可编辑。如果控制row和column的值,可以控制任何一个单元格可编辑或不可编辑。&&&
网上很多回答的主要有两种错误:
1、建议直接使用JTable的方法 setEnabled(false),
例如:jTable.setEnabled(false),但是这种方法只是使jTable失效,即让jTable只能看,不能做其他任何操作。
2、在定义DefaultTableModel类时使用isCellEditable方法。
例如:tableModel = new DefaultTableModel(){public boolean
isCellEditable(int row, int column) {}};
其实这是错误的,虽然我刚开始也是这么认为的。
这样使用isCellEditable没有作用,必须在定义JTable类时使用,例如正文中的正确代码!
为什么会这样?难道JTable本身也有isCellEditable方法吗?
网上找了几个方法,都是说要继承JTable类,然后重载isCellEditable方法,再用这个类实现。
感觉有些烦琐。
后又看到又用内部类实现的。这才感觉比较方便。
然后,我也需要使用TableModel,所以,自己想了想用内部类方法重载DefaultTableModel,试了试,也可以实现。也比较方便。就贴在这里方便查阅了。
javax.swing.table.DefaultTableModel t = new
javax.swing.table.DefaultTableModel(columnName,0){
&&&&&&&&&&&
public boolean isCellEditable(int row, int column)
&&&&&&&&&&&
&&&&&&&&&&&&&&&
&&&&&&&&&&&
jTable.setModel(t);&
给你个例子看看吧
import & java.awt.*;
import & java.awt.event.ActionE
import & java.awt.event.ActionL
import & java.util.*;
import & javax.swing.*;
import & javax.swing.table.*;
public & class & Test
private & JFrame & frame
private & JTable & table
private & Table_Model & model
private & JScrollPane & s_pan
private & JButton & button_1
& = & null, &
button_2 & = &
public & Test() & {
frame & = & new
& JFrame( "Test ");
button_1 & = & new
& JButton( "清除现有的数据 ");
button_1.addActionListener(new & ActionListener()
public & void &
actionPerformed(ActionEvent & e)
removeData();
button_2 & = & new
& JButton( "再次添加数据 ");
button_2.addActionListener(new & ActionListener()
public & void &
actionPerformed(ActionEvent & e)
addData();
model & = & new
& Table_Model(20);
table & = & new
& JTable(model);
table.setBackground(Color.white);
String & [] & age
& = & { "16 ", &
"17 ", & "18 ", & "19 ",
& "20 ", & "21 ",
JComboBox & com & =
& new & JComboBox(age);
TableColumnModel & tcm & =
& table.getColumnModel();
tcm.getColumn(3).setCellEditor(new &
DefaultCellEditor(com));
s_pan & = & new
& JScrollPane(table);
frame.getContentPane().add(s_pan, &
BorderLayout.CENTER);
frame.getContentPane().add(button_1, &
BorderLayout.NORTH);
frame.getContentPane().add(button_2, &
BorderLayout.SOUTH);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(300, & 200);
frame.setVisible(true);
private & void & addData()
model.addRow( "李逵 ", & true, &
table.updateUI(); & // &
刷新,将改变后的内容显示出来
private & void & removeData()
model.removeRows(0, & model.getRowCount());
table.updateUI(); & // &
刷新,将改变后的内容显示出来
public & static & void
& main(String & args[])
new & Test();
class & Table_Model & extends
& AbstractTableModel & {
private & static & final
& long & serialVersionUID
-7589758L;
private & Vector & content
private & String[] & title_name
& = & { & "ID ",
& "姓名 ", & "性别 ",
& "年龄 " & };
public & Table_Model() & {
content & = & new
& Vector();
public & Table_Model(int & count)
content & = & new
& Vector(count);
public & void & addRow(String
& name, & boolean
& sex, & String
& age) & {
Vector & v & = &
new & Vector(4);
v.add(0, & new &
Integer(content.size()));
v.add(1, & name);
v.add(2, & new &
Boolean(sex));
v.add(3, & age);
content.add(v);
public & void & removeRow(int
& row) & {
content.remove(row);
public & void & removeRows(int
& row, & int &
count) & {
for & (int & i &
= & 0; & i &
& & & i++)
if & (content.size() &
& & row) & {
content.remove(row);
public & boolean &
isCellEditable(int & rowIndex, &
int & columnIndex){
if(columnIndex & == & 0){
& // & 序列号不能修改
if(rowIndex & & &
5){ & // & 前5行不能修改
public & void & setValueAt(Object
& value, & int &
row, & int & col){
((Vector) & content.get(row)).remove(col);
((Vector) & content.get(row)).add(col,
this.fireTableCellUpdated(row, & col);
public & String &
getColumnName(int & col) &
return & title_name[col];
public & int & getColumnCount()
return & title_name.
public & int & getRowCount()
return & content.size();
public & Object & getValueAt(int
& row, & int &
return & ((Vector) &
content.get(row)).get(col);
public & Class &
getColumnClass(int & col){
return & getValueAt(0, &
col).getClass();
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。中国Java开发网 - 如何控制 JTable 的表头不让随意拖动?
Topic: 如何控制 JTable 的表头不让随意拖动?
1.如何控制 JTable 的表头不让随意拖动?
Posted by: jimmywin
Posted on:
如(图一)所示,当点击某行时,我可以把第一列此行的选中状态设为真(RadionButton+checkBox),可是如果用户拖动表头时,第一列的索引就改变了,我就不能确定装载RadioButton的列是哪列了。如(图二)所示。请问能否控制表头不让随意拖动,或者最好是能动态获知某一列的索引信息,比如有个 getIndexByColumnName()什么的?谢谢!
2.Re:如何控制 JTable 的表头不让随意拖动?
[Re: jimmywin]
Posted by: jimmywin
Posted on:
(图二):
3.Re:如何控制 JTable 的表头不让随意拖动?
[Re: jimmywin]
Posted by: jimmywin
Posted on:
4.Re:如何控制 JTable 的表头不让随意拖动?
[Re: jimmywin]
Posted by: floater
Posted on:
JTableHeader has a method: setReorderingAllowed(boolean reorderingAllowed) This will disallow users to swap columns.OrYou can get the column index for your boolean column by either memorizing this special column index or do a look up in the model and then a mapping to the table. search table sorter at , it should give you a table sorter, that has an example for this.
5.Re:如何控制 JTable 的表头不让随意拖动?
[Re: jimmywin]
Posted by: jimmywin
Posted on:
哦,谢谢!:)
Powered by & Version Jute 1.5.6 Ent
Copyright &
Cjsdn Team. All Righits Reserved.
客服电话&&&&&客服信箱&&&&&客服QQ&714923posts - 320,&
comments - 68,&
trackbacks - 0
要使单元格不能被编辑,重写tableModel里面的isCellEditable即可,例如:
String[] strs = { "学号", "姓名", "性别", "年龄", "地址" };
DefaultTableModel dtm = new DefaultTableModel(strs, 0){&&&public boolean isCellEditable(int row, int column) {&&&&// TODO Auto-generated method stub&&&&//返回true表示能编辑,false表示不能编辑&&&}&&&&&};
要使数据居中对齐:
DefaultTableCellRenderer&& r&& =&& new&& DefaultTableCellRenderer();&& r.setHorizontalAlignment(JLabel.CENTER);&& table.setDefaultRenderer(Object.class,&& r);table& 为你JTABLE 的实例对象
隐藏JTable中的某一列:
//把第一列隐藏掉
DefaultTableColumnModel dcm = (DefaultTableColumnModel)table&.getColumnModel();//获取列模型&&&dcm.getColumn(0).setMinWidth(0);&&//将第一列的最小宽度、最大宽度都设置为0,就看不到了&dcm.getColumn(0).setMaxWidth(0);
阅读(...) 评论()}

我要回帖

更多关于 java拖动验证码 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信