JTable中如何设置单元格一部分可选一部分不可选

houname 2007-09-27 04:47:29
JTable中如何设置单元格一部分可选一部分不可选
...全文
534 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
houname 2007-10-05
  • 打赏
  • 举报
回复
谢谢帮忙,结贴
yuyu622 2007-10-01
  • 打赏
  • 举报
回复
学习一下
UNDEAD_YANG 2007-09-30
  • 打赏
  • 举报
回复
import java.awt.BorderLayout;

import javax.swing.DefaultCellEditor;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumn;
import javax.swing.table.TableColumnModel;
import javax.swing.table.TableModel;

public class CellSelected extends JFrame
{
/**
*
*/
private static final long serialVersionUID = 5829056027287719130L;

public CellSelected()
{
super("Table");
String value[][]={
{"1","2","3","4","5"},
{"1","2","3","4","5"},
{"1","2","3","4","5"},
{"1","2","3","4","5"},
{"1","2","3","4","5"}
};
String columnName[]={"col1","col2","col3","col4","col5"};

MyTableModel model=new MyTableModel(value,columnName);
MyJTable table=new MyJTable(model);
table.setRowSelectionAllowed(false);
table.setCellSelectionEnabled(true);
TableColumnModel colmodel=table.getColumnModel();
for(int index=0;index<columnName.length;index++)
{
TableColumn tc = colmodel.getColumn(index);
JTextField editor=new JTextField();
DefaultCellEditor cellEditor=new DefaultCellEditor(editor);
cellEditor.setClickCountToStart(1);
tc.setCellEditor(cellEditor);
}
this.add(new JScrollPane(table),BorderLayout.CENTER);
this.setSize(300, 200);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}

public static void main(String args[])
{
new CellSelected();
}
}

class MyTableModel extends DefaultTableModel
{
public MyTableModel(Object[][] value,Object[] columnName)
{
super(value,columnName);
}
public boolean isCellEditable(int row, int column)
{
return false;
}
}

class MyJTable extends JTable
{
public MyJTable(TableModel tm)
{
super(tm);
}

public boolean isCellSelected(int row, int column)
{
if(row<2)
{
return false;
}
else if(column<2)
{
return false;
}
else
return super.isCellSelected(row, column);
}
}
程序设置行数小于2和列小于2的单元格不被选中,你可以根据需要自己设置,记得结帐!!
UNDEAD_YANG 2007-09-30
  • 打赏
  • 举报
回复
重写JTable类的isCellSelected方法
shaot399 2007-09-29
  • 打赏
  • 举报
回复
不行吧,怎么能不可选呢!
houname 2007-09-29
  • 打赏
  • 举报
回复
jtable可已设置单元格可选或不可选但都是全部的,我的需求是一部分可选一部分不可选。郁闷呀!有高手实现过吗?帮帮忙!分不够可以加。
houname 2007-09-28
  • 打赏
  • 举报
回复
to ddpie(似水无痕)
谢谢帮忙,但是我要实现的是单元格一部分可选一部分不可选,不是单元格一部分可编辑一部分不可编辑。希望能帮忙给个思路
ddpie 2007-09-28
  • 打赏
  • 举报
回复
用TableModel吧,下面只是个例子代码,要想真的使用TableModel还要复写DefaultTableModel中的一些方法,如getValueAt等。

//如下代码实现表格第3列所有的单元格不能编辑,第3行第4列的单元格不能编辑

package com.ddpie.frame;

import java.awt.BorderLayout;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;

public class TestJTable {
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setSize(300,200);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(new BorderLayout());
JTable table = new JTable();
frame.getContentPane().add(new JScrollPane(table));
table.setModel(new DefaultTableModel(){
private static final long serialVersionUID = -5844471166783040698L;
public int getColumnCount(){
return 5;
}
public int getRowCount(){
return 20;
}
public boolean isCellEditable(int rowIndex,int columnIndex){//关键是这里
if(rowIndex==2&&columnIndex==3)
return false;
if(columnIndex==2)
return false;
return true;
}
});
frame.setVisible(true);
}

}
ddpie 2007-09-28
  • 打赏
  • 举报
回复
To houname(冷血)
我试着写了几段代码好像都不能满足你的要求,不好意思,帮你顶一下吧^o^
cjqq81 2007-09-27
  • 打赏
  • 举报
回复
很简单,复写JTable的Editor和Renderer就可以了

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧