做一个程序需要用到JTable。但遇到点问题。请教下大家。JTable的数据是程序启动的时候从SQL数据库中加载的。所以行数不能固定。但列数是固定的。
1、JTable如何直接读取选中一行中每个单元格的数据?
2、用鼠标按住列名那里 可以移动更改列的位置。如何禁止这样的功能?
3、如何禁止双击单元格更改单元格内容这种功能?
4、我对数据库中的数据在一个FRAME里进行 增加,删除,修改等功能后。如何在JTable上直接反馈出来?是重新从SQL中加载数据显示JTable?还是有什么其他方法能实现?
问题比较多也比较急麻烦大家帮忙看看了 小弟初学JAVA。谢谢了
1、JTable如何直接读取选中一行中每个单元格的数据?
2、用鼠标按住列名那里 可以移动更改列的位置。如何禁止这样的功能?
3、如何禁止双击单元格更改单元格内容这种功能?
4、我对数据库中的数据在一个FRAME里进行 增加,删除,修改等功能后。如何在JTable上直接反馈出来?是重新从SQL中加载数据显示JTable?还是有什么其他方法能实现?
问题比较多也比较急麻烦大家帮忙看看了 小弟初学JAVA。谢谢了
解决方案 »
- Runnable 接口 如果调用线程?
- (急)java环境变量的问题
- java线程自动中止的问题
- 谁用过java swing做类似网络拓扑图的东西?说说吧。
- 桌面共享 【Robot类】 【画图】
- java用hibernate向oracle中插入new Date(),主键出错
- JAVA 初学者怎样才能JAVA高手?我想学WEB开发.能介绍一下应该学习哪些方面的东西,和推荐一些相关书籍吗?
- ie运行applet需要的最小的安装文件是??如何判断客户浏览器是否安装java支持?
- tomcat 4.0中,我要用到bean,引用时class的默认路进是什么?
- 为什么总是null呢
- java构造函数
- ”事件监听机制,接口放在外部类中“ 的问题
int row = jTable1.getSelectRow();
int col= jTable1.getSelectRow();
String str = (String)jTable1.valueAt(row,col).toString();
这样就可以取得table中的每个单元格的内容了. 限制列名移动,好像是不行的哦
for (int i = 0; i < table.getColumnCount(); i++) {
table.getValueAt(table.getSelectedRow(), i);
}
2、用鼠标按住列名那里 可以移动更改列的位置。如何禁止这样的功能?
table.getTableHeader().setReorderingAllowed(false);
3、如何禁止双击单元格更改单元格内容这种功能?
如果单纯的就想屏蔽鼠标的双击,那么覆盖JTable的方法:
protected void processMouseEvent(MouseEvent e) {
if (e.getClickCount() == 2) {
return;
}
super.processMouseEvent(e);
}4、我对数据库中的数据在一个FRAME里进行 增加,删除,修改等功能后。如何在JTable上直接反馈出来?是重新从SQL中加载数据显示JTable?还是有什么其他方法能实现?
直接修改Model的值就可以了吧,保存的时候再走数据库
我是先实现了一个抽象的 AbstractTableModel 类 TBmodel 然后连接数据库,将数据库的查询出来的结果放入到ArrayList当中!
实现 AbstractTableModel 这个类当中的三个必须实现方法,
//获得列数,此处的titles,我已经初始化了!
public int getColumnCount() {
return titles.size();
}
//获得行的行数,此处的data,就是上面提到的ArrayList data 也就是查询出来的结果集
public int getRowCount() {
return data.size();
}
//此方法就是获得每个单元格的数据
public Object getValueAt(int rowIndex, int columnIndex) {
String str[]=(String[])data.get(rowIndex);
return str[columnIndex];
}实例化 AbstractTableModel 类 如: TBmodel tb = new TBmodel();
然后你再实例化一个JTable 如: JTable jt = new JTable(tb);
这样表 jt 就会自动从data 集合当中读取数据了!
//设置表格模式为7行7列
dModel = new AbstractTableModel() {
public int getRowCount() {
return 7;
}
public int getColumnCount() {
return 7;
}
//获取表中单元格的值,为系统当前时间
public Object getValueAt(int row, int column) {
if (row == 0) {
//获取表格的标题
return getHeader(column);
}
row--;
Calendar now = (Calendar) MyCalendar.this.now.clone();
//设置当前日期为一个月第一天
now.set(Calendar.DAY_OF_MONTH, 1);
//获得这个月的最大天数
int dayCount = now.getActualMaximum(Calendar.DAY_OF_MONTH);
//获得当前周的第几天
int moreDayCount = now.get(Calendar.DAY_OF_WEEK) - 1;
int index = row * 7 + column;
//计算出当前日期
int dayIndex = index - moreDayCount + 1;
if (index < moreDayCount || dayIndex > dayCount) {
return null;
} else {
return new Integer(dayIndex);
}
}
};
//建立制定数据的表格
dTable = new CalendarTable(dModel, now);
dTable.setCellSelectionEnabled(true);//让用户能够同时选择单个单元格或者整个行,同时选择列
dTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);//SINGLE_SELECTION允许一次选择一行
//设置表格注册接口TableCellRenderer
dTable.setDefaultRenderer(dTable.getColumnClass(0), new TableCellRenderer() {
//当表格处于表现状态时调用 getTableCellRendererComponent
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,
boolean hasFocus, int row, int column) {
String text = (value == null) ? "" : value.toString();
JLabel color = new JLabel(text);
color.setOpaque(true); //使得标签不透明
//设置标签颜色
if (row == 0) {
color.setForeground(hForeground);
color.setBackground(hBackground);
} else {
if (isSelected) {
color.setForeground(sForeground);
color.setBackground(sBackground);
} else {
color.setForeground(foreground);
color.setBackground(background);
}
}
return color;
}
});
updateView();
//隐藏表格线
dTable.setShowHorizontalLines(false);
dTable.setShowVerticalLines(false);
add(dTable, BorderLayout.CENTER);
add(Box.createRigidArea(new Dimension(0,20)));
}
//设置表格标题显示
public static String getHeader(int index) {
switch (index) {
case 0:
return SUN;
case 1:
return MON;
case 2:
return TUE;
case 3:
return WED;
case 4:
return THU;
case 5:
return FRI;
case 6:
return SAT;
default:
return null;
}
}
public static class CalendarTable extends JTable { private Calendar now; public CalendarTable(TableModel model, Calendar now) {
super(model);
this.now = now;
} public void changeSelection(int row, int column, boolean toggle, boolean extend) {
super.changeSelection(row, column, toggle, extend);
if (row == 0) {
return;
}
//获得表格被点击的日期
Object obj = getValueAt(row, column);
if (obj != null) {
now.set(Calendar.DAY_OF_MONTH, ((Integer)obj).intValue());
}
} }
//更新表格,使得表格处于选择状态
public void updateView() {
dModel.fireTableDataChanged();
dTable.setRowSelectionInterval(now.get(Calendar.WEEK_OF_MONTH),
now.get(Calendar.WEEK_OF_MONTH));
dTable.setColumnSelectionInterval(now.get(Calendar.DAY_OF_WEEK) - 1,
now.get(Calendar.DAY_OF_WEEK) - 1);
}
2、设置列名是否可以移动是 table.getTableHeader().setReorderingAllowed(true or false);
3、覆盖iscelleditor(int row,int col)这个方法就可以了
4、个人感觉要重新加载下
在return处写自己的处理阿,我写return是因为不知道你想实现什么功能