以下是一个小程序,参考下
import javax.swing.*;
import javax.swing.table.JTableHeader;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.*;
public class Test extends JFrame{
// 定义组件
private jscrollPane scpDemo;
private JTableHeader jth;
private JTable tabDemo;
private JButton btnShow;
// 构造方法
public Test(){
// 窗体的相关属性的定义
super("JTable数据绑定示例");
this.setSize(330,400);
this.setLayout(null);
this.setLocation(100,50);
// 创建组件
this.scpDemo = new JScrollPane();
this.scpDemo.setBounds(10,50,300,270);
this.btnShow = new JButton("显示数据");
this.btnShow.setBounds(10,10,300,30);
// 给按钮注册监听
this.btnShow.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent ae){
btnShow_ActionPerformed(ae);
}
});
// 将组件加入到窗体中
add(this.scpDemo);
add(this.btnShow);
// 显示窗体
this.setVisible(true);
}
// 点击按钮时的事件处理
public void btnShow_ActionPerformed(ActionEvent ae){
// 以下是连接数据源和显示数据的具体处理方法,请注意下
try{
// 获得连接
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection conn = DriverManager.getConnection("jdbc:odbc:localServer","sa","");
// 建立查询条件
String sql = "select * from localServer";
PreparedStatement pstm = conn.prepareStatement(sql);
// 执行查询
ResultSet rs = pstm.executeQuery();
// 计算有多少条记录
int count = 0;
while(rs.next()){
count++;
}
rs = pstm.executeQuery();
// 将查询获得的记录数据,转换成适合生成JTable的数据形式
Object[][] info = new Object[count][4];
count = 0;
while(rs.next()){
info[count][0] = Integer.valueOf( rs.getInt("id"));
info[count][1] = rs.getString("name");
info[count][2] = Integer.valueOf( rs.getInt("age") );
info[count][3] = rs.getString("sex");
count++;
}
// 定义表头
String[] title = {"学号","姓名","年龄","性别"};
// 创建JTable
this.tabDemo = new JTable(info,title);
// 显示表头
this.jth = this.tabDemo.getTableHeader();
// 将JTable加入到带滚动条的面板中
this.scpDemo.getViewport().add(tabDemo);
}catch(ClassNotFoundException cnfe){
JOptionPane.showMessageDialog(null,"数据源错误","错误",JOptionPane.ERROR_MESSAGE);
}catch(SQLException sqle){
JOptionPane.showMessageDialog(null,"数据操作错误","错误",JOptionPane.ERROR_MESSAGE);
}
}
public static void main(String[] args){
new Test();
}
}
② java中数据库变了但我的JTtable表格不能够马上变怎么办啊
这个问题我也碰到过,你更新数据库后,调用方法立即把DefaultTableModel跟数据库数据再次吻合,然后再后面加上JTable名.repaint();方法就可以了,它会立即自动刷新表格同步。(如这样声明的:JTable myTable=new JTable(你的Table模型);然后更新数据库后,更改DefaultTableModel与数据库数据一样,再在它之后调用语句myTable.repaint();就可以了
③ JAVA 怎么把数据库里的数据显示在JTable表格里
这个要从头说起就复杂了。我简单说一下吧。
首先,要把数据从库中取出来,假设你已经会了。
其次,创建一个表格模型,
DefaultTableModel model=new DefaultTableModel();
//创建表头
model.setColumnIdentifiers(new Object[]{"日期/时间","操作工","产品型号","数量"});
再次,添加数据
while(results.next())
{
String dt=results.getString("dt");
String name=results.getString("name");
String pname=results.getString("proct");
int i=results.getInt("num");
//把以上数据添加到表格模型的一行中
model.addRow(new Object[]{dt,name,pname,i});
}
最后,用模型生成表格
JTable table=new JTable(model);
当然,还有一些其它的操作,比如把表格显示出来,表格的字体、行高等设置等等,不再一一赘述。
④ java中JTable 通过检索搜索出某行的其中一个数据 将该行置顶并改变颜色 连数据库多列数据咋办
不是很明白你的要求。具体的操作是怎样的的呢?
假设数据库中有个学生表:
学号 姓名 年龄
001 张三 20
002李四 21
假设按姓名搜索,输入搜索条件“张”:
情况1、根据搜索条件直接搜索数据库记录(通常都是这样搜索),那从数据库搜索出的记录就只有姓名包含“张”的记录,然后JTable中也就只展示这些记录,就无所谓置顶不置顶啦。
情况2、只是根据搜索条件在当前JTable展示的数据中搜索,代码如下:
importjava.awt.BorderLayout;
importjava.awt.GridLayout;
importjava.awt.event.ActionEvent;
importjava.awt.event.ActionListener;
importjavax.swing.JButton;
importjavax.swing.JFrame;
importjavax.swing.JLabel;
importjavax.swing.JPanel;
importjavax.swing.JScrollPane;
importjavax.swing.JTable;
importjavax.swing.JTextField;
importjavax.swing.border.EmptyBorder;
importjavax.swing.event.TableModelEvent;
importjavax.swing.event.TableModelListener;
{
privateJPanelsearchPanel;
privateJTextFieldnumField;
;
privateJTextFieldnameField;
;
privateJTabletable;
;
publicJTableTest(){
super("SimpleJTableTest");
setSize(400,300);
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
searchPanel=newJPanel();
searchPanel.setBorder(newEmptyBorder(3,3,3,3));
searchPanel.setLayout(newGridLayout(2,3,2,3));
searchPanel.add(newJLabel("学号"));
numField=newJTextField(20);
searchPanel.add(numField);
searchByNumButton=newJButton("按学号搜索");
searchByNumButton.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEventevent){
table.getSelectionModel().clearSelection();
tableModel.doSearchByNum(numField.getText());
}
});
searchPanel.add(searchByNumButton);
searchPanel.add(newJLabel("姓名"));
nameField=newJTextField(20);
searchPanel.add(nameField);
searchByNameButton=newJButton("按姓名搜索");
searchByNameButton.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEventevent){
table.getSelectionModel().clearSelection();
tableModel.doSearchByName(nameField.getText());
}
});
searchPanel.add(searchByNameButton);
getContentPane().add(searchPanel,BorderLayout.NORTH);
tableModel=newTestTableModel();
tableModel.addTableModelListener(newTableModelListener(){
@Override
publicvoidtableChanged(TableModelEvente){
if(tableModel.getHitRowCount()>0){
table.setRowSelectionInterval(0,tableModel.getHitRowCount()-1);
}
}
});
table=newJTable(tableModel);
JScrollPanejsp=newJScrollPane(table);
getContentPane().add(jsp,BorderLayout.CENTER);
}
publicstaticvoidmain(String[]args){
JTableTestself=newJTableTest();
self.setVisible(true);
}
}
importjava.util.ArrayList;
importjava.util.Arrays;
importjava.util.List;
importjavax.swing.table.AbstractTableModel;
{
privateList<Student>data=Arrays.asList(newStudent("001","王二",20),newStudent("002",
"王二小",19),newStudent("003","张三",20),newStudent("004","张三丰",21),newStudent("005",
"李四",21),newStudent("006","李四光",19));
privateList<Integer>searchHitRows=newArrayList<Integer>();
@Override
publicintgetRowCount(){
returndata.size();
}
@Override
publicintgetColumnCount(){
return3;
}
@Override
publicStringgetColumnName(intcolumn){
if(column==0)
return"学号";
elseif(column==1)
return"姓名";
return"年龄";
}
@Override
publicObjectgetValueAt(introwIndex,intcolumnIndex){
Studentstudent=data.get(rowIndex);
if(columnIndex==0)
returnstudent.getNum();
elseif(columnIndex==1)
returnstudent.getName();
returnstudent.getAge();
}
/**按姓名搜索*/
publicvoiddoSearchByName(Stringkey){
searchHitRows.clear();
if(key==null||"".equals(key))
return;
for(inti=0;i<data.size();i++){
StudentstudentI=data.get(i);
Stringvalue=studentI.getName();
if(value.indexOf(key)<0)
continue;
intj=0;
for(j=i-1;j>=0;j--){
StudentstudentJ=data.get(j);
StringvalueJ=studentJ.getName();
if(valueJ.indexOf(key)>=0)
break;
}
Studenttemp=data.get(j+1);
data.set(j+1,studentI);
data.set(i,temp);
searchHitRows.add(Integer.valueOf(j+1));
}
fireTableDataChanged();
}
/**按学号搜索*/
publicvoiddoSearchByNum(Stringkey){
searchHitRows.clear();
if(key==null||"".equals(key))
return;
for(inti=0;i<data.size();i++){
StudentstudentI=data.get(i);
Stringvalue=studentI.getNum();
if(value.indexOf(key)<0)
continue;
intj=0;
for(j=i-1;j>=0;j--){
StudentstudentJ=data.get(j);
StringvalueJ=studentJ.getNum();
if(valueJ.indexOf(key)>=0)
break;
}
Studenttemp=data.get(j+1);
data.set(j+1,studentI);
data.set(i,temp);
searchHitRows.add(Integer.valueOf(j+1));
}
fireTableDataChanged();
}
publicvoidsetData(List<Student>data){
if(data==null)
("参数data不能为null。");
this.data=data;
fireTableDataChanged();
}
publicintgetHitRowCount(){
returnsearchHitRows.size();
}
}
从数据库查询出记录后,转成Student对象列表调用TestTableModel的setData设置表格的数据。
⑤ java中怎么删除或者修改JTable指定的一行内容
jtable修改内容可以通过defaulttablemodel来修改的,以下是defaulttablemodel的简单用法
intcol=jTable1.getSelectedColumn();//获取选中的列号
introw=jTable1.getSelectedRow();//获取选中的行号
DefaultTableModelmodel=(DefaultTableModel)jTable1.getModel();//获取defaulttablemodel
Objectval=model.getValueAt(row,col);//根据行号和列号,获取某个单元格的值
//其他
model.removeRow(index);//删除某行
model.setValueAt(value,row,col);//修改某单元格的值
更多defaulttablemodel用法,可以去查API文档
⑥ 如何更改Swing-JTable单元格中的内容后,存入数据库
就是用getValueAt(intr,intc)啊!用户一旦修改了表的数据,你在监听器里,得到那个table的对象,就可以之间用这个getValueAt方法的如果还是修改之前的,可能有几个可能:1.那条数据并没有真正的修改到了table中,这种情况也是最常见的错误解决方法:修改数据不能用简单的setValueAt()方法,而是应该对tablemodel里面的数据做修改,然后setModel(Model),这样传回去的table才是真正已经修改过数据的table,否则就不是,这也是大家都用的方法2.自己的监听器写错了,可能在监听器里部分代码有问题其他,应该没有问题了,你看下吧,估计是你的table数据没有真正的插入到table中,不是真正的修改数据,也就是说,你没有用到setModel()方法,而是直接在界面上点击修改数据,没有用到监听器去setModel()
⑦ 在JTable中修改单元格并返回数据库
JTable的单元格可以修改,而且可以监听单元格修改事件,实现TableModelListener的public void tableChanged(TableModelEvent e)方法,监听到单元格修改后,在响应函数中把修改后的值传入数据库就ok了