熟悉java表格jTable的使用的帮帮忙看看怎么刷新。

xqn516 2009-11-10 05:45:05
我现在做一个应用,为了方便理解,我对应用进行了简化:
在一个JFrame上,有两个组件,一个表格,一个jComboBox。表格是镶嵌在jScrollPane中的。我想实现的功能是我点击选择jComboBox中的选项后,把选项内容更新到表格的内容中,表格是由两个向量Vector,用DonejTableModel.setDataVector(Data, jTableHeadName);生成的,jComboBox的监听器触发一个initTable()方法,目前该方法已经可以更新Data,但是不知道怎么刷新界面,代码如下:
package Table;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Vector;

import javax.swing.*;
import javax.swing.table.DefaultTableModel;


public class flushTable extends JFrame {

private static final long serialVersionUID = 1L;
private JPanel jContentPane = null;
private JScrollPane ThejScrollPane = null;
private JTable ThejTable = null;
private JComboBox jComboBox = null;
private Vector jTableHeadName = new Vector();
private Vector Data = new Vector();

/**
* This method initializes ThejScrollPane
*
* @return javax.swing.JScrollPane
*/
private JScrollPane getThejScrollPane() {
if (ThejScrollPane == null) {
ThejScrollPane = new JScrollPane();
ThejScrollPane.setViewportView(getThejTable());
}
return ThejScrollPane;
}

/**
* This method initializes ThejTable
*
* @return javax.swing.JTable
*/
private JTable getThejTable() {
if (ThejTable == null) {
String[] DoneColumnNames = {"日期"};
for (int i = 0; i < DoneColumnNames.length; i++) {
jTableHeadName.add(DoneColumnNames[i]);
}
DefaultTableModel DonejTableModel = new DefaultTableModel();
DonejTableModel.setDataVector(Data, jTableHeadName);
ThejTable = new JTable(DonejTableModel);
}
return ThejTable;
}

/**
* This method initializes jComboBox
*
* @return javax.swing.JComboBox
*/
private JComboBox getJComboBox() {
if (jComboBox == null) {
String[] WorkTypeList = { "星期一", "星期二", "星期三", "星期四", "星期五" };
jComboBox = new JComboBox(WorkTypeList);
}
return jComboBox;
}

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
SwingUtilities.invokeLater(new Runnable() {
public void run() {
flushTable thisClass = new flushTable();
thisClass.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
thisClass.setVisible(true);
}
});
}

/**
* This is the default constructor
*/
public flushTable() {
super();
initTable();
initialize();
addListener();
}

public void initTable() {
Data = new Vector();
if(jComboBox!=null){
Data.add(getJComboBox().getSelectedItem());
}
}

/**
* This method initializes this
*
* @return void
*/
private void initialize() {
this.setSize(300, 200);
this.setContentPane(getJContentPane());
this.setTitle("JFrame");
}

/**
* This method initializes jContentPane
*
* @return javax.swing.JPanel
*/
private JPanel getJContentPane() {
if (jContentPane == null) {
jContentPane = new JPanel();
jContentPane.setLayout(new BorderLayout());
jContentPane.add(getJComboBox(), BorderLayout.NORTH);
jContentPane.add(getThejScrollPane(), BorderLayout.CENTER);
}
return jContentPane;
}
private void addListener(){
jComboBox.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
JComboBox cb = (JComboBox) e.getSource();
initTable();
System.out.println(getJComboBox().getSelectedItem());
}
});
}
}
...全文
1001 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
隐莽 2010-10-05
  • 打赏
  • 举报
回复
新手求指导,怎么样进行JTable 的刷新啊……能讲讲方法,或者推荐点资源么,我看到上面的代码感觉无从下手……
zhuzeitou 2009-11-11
  • 打赏
  • 举报
回复
你的界面也显示的是什么?
gentalguo 2009-11-11
  • 打赏
  • 举报
回复
这代码……真乱
问你几个问题,第一,你的Data是什么?表格是一个二维结构~~也就是链表之链表的结构
那你为什么这么存?Data.add(getJComboBox().getSelectedItem());
帮你改了一下,你自己琢磨一下吧。
今天是光棍节,老光棍我可是好久都不帮人改代码了哦~~呵呵
改后代码附下:



import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Vector;

import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.table.DefaultTableModel;

public class FlushTable extends JFrame {

private static final long serialVersionUID = 1L;
private JPanel jContentPane = null;
private JScrollPane ThejScrollPane = null;
private JTable ThejTable = null;
private JComboBox jComboBox = null;
private Vector jTableHeadName = new Vector();
private Vector Data = new Vector();

/**
* This method initializes ThejScrollPane
*
* @return javax.swing.JScrollPane
*/
private JScrollPane getThejScrollPane() {
if (ThejScrollPane == null) {
ThejScrollPane = new JScrollPane();
ThejScrollPane.setViewportView(getThejTable());
}
return ThejScrollPane;
}

/**
* This method initializes ThejTable
*
* @return javax.swing.JTable
*/
private JTable getThejTable() {
if (ThejTable == null) {
String[] DoneColumnNames = { "日期" };
for (int i = 0; i < DoneColumnNames.length; i++) {
jTableHeadName.add(DoneColumnNames[i]);
}
DefaultTableModel DonejTableModel = new DefaultTableModel();
DonejTableModel.setDataVector(Data, jTableHeadName);
ThejTable = new JTable(DonejTableModel);
}
return ThejTable;
}

/**
* This method initializes jComboBox
*
* @return javax.swing.JComboBox
*/
private JComboBox getJComboBox() {
if (jComboBox == null) {
String[] WorkTypeList = { "星期一", "星期二", "星期三", "星期四", "星期五" };
jComboBox = new JComboBox(WorkTypeList);
}
return jComboBox;
}

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
SwingUtilities.invokeLater(new Runnable() {
public void run() {
FlushTable thisClass = new FlushTable();
thisClass.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
thisClass.setVisible(true);
}
});
}

/**
* This is the default constructor
*/
public FlushTable() {
super();
initTable();
initialize();
addListener();
}

public void initTable() {
Data = new Vector();
if (jComboBox != null) {
Vector v = new Vector();
v.add(getJComboBox().getSelectedItem());
Data.add(v);

}

}

/**
* This method initializes this
*
* @return void
*/
private void initialize() {
this.setSize(300, 200);
this.setContentPane(getJContentPane());
this.setTitle("JFrame");
}

/**
* This method initializes jContentPane
*
* @return javax.swing.JPanel
*/
private JPanel getJContentPane() {
if (jContentPane == null) {
jContentPane = new JPanel();
jContentPane.setLayout(new BorderLayout());
jContentPane.add(getJComboBox(), BorderLayout.NORTH);
jContentPane.add(getThejScrollPane(), BorderLayout.CENTER);
}
return jContentPane;
}

private void addListener() {
jComboBox.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
JComboBox cb = (JComboBox) e.getSource();
initTable();
System.out.println(getJComboBox().getSelectedItem());
((DefaultTableModel) ThejTable.getModel()).setDataVector(Data,
jTableHeadName);

}
});
}
}

gaomochi 2009-11-11
  • 打赏
  • 举报
回复
DonejTableModel.setDataVector(Data, jTableHeadName);

Data中加入String常量后出现异常,此语句出现java.lang.String cannot be cast to java.util.Vector的类型转换异常,我对Vector不怎么熟悉,不过既然是变长的用ArrayList就好了

关于刷新JTable
可以在inittable()中加入如下语句
DefaultTableModel DonejTableModel = new DefaultTableModel();
DonejTableModel.setDataVector(Data,
jTableHeadName);
ThejTable.setModel(DonejTableModel);
ThejScrollPane.validate();

当然,前提是你的DonejTableModel.setDataVector(Data, jTableHeadName); 可以成功执行后

本人水平有限,希望对你能有帮助
qingzhe2008 2009-11-11
  • 打赏
  • 举报
回复

public void initTable() {
Vector Data1 = new Vector();
if (jComboBox != null && Data != null) {
Data1.add(getJComboBox().getSelectedItem());
Data.removeAllElements();
Data.insertElementAt(Data1, 0);
donejTableModel.fireTableDataChanged();
this.repaint();
}
}

donejTableModel 升级为字段

zhuzeitou 2009-11-11
  • 打赏
  • 举报
回复
	public void initTable() {
Data = new Vector();
if (jComboBox != null) {
Vector temp = new Vector();
temp.add(getJComboBox().getSelectedItem());
Data.add(temp);
DefaultTableModel DonejTableModel = (DefaultTableModel) ThejTable.getModel();
DonejTableModel.setDataVector(Data, jTableHeadName);
}
}

这样?
xqn516 2009-11-11
  • 打赏
  • 举报
回复
3楼的兄弟,貌似你的方法没用,或者可以说详细点?
grubby4k 2009-11-11
  • 打赏
  • 举报
回复
private JTable getThejTable() { 
if (ThejTable == null) {
String[] DoneColumnNames = {"日期"};
for (int i = 0; i < DoneColumnNames.length; i++) {
jTableHeadName.add(DoneColumnNames[i]);
}
DefaultTableModel DonejTableModel = new DefaultTableModel();
DonejTableModel.setDataVector(Data, jTableHeadName);
DonejTableModel.fireTableDataChanged();
ThejTable = new JTable(DonejTableModel);
}
return ThejTable;
}
xqn516 2009-11-10
  • 打赏
  • 举报
回复
如果可以的话,最好把刷新的方法放在initTable() 方法里面。
谢谢各位!分不多只能算意思一下。感激是最真诚的。

62,621

社区成员

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

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