JTable 不能正确显示标题.docx
《JTable 不能正确显示标题.docx》由会员分享,可在线阅读,更多相关《JTable 不能正确显示标题.docx(38页珍藏版)》请在冰点文库上搜索。
![JTable 不能正确显示标题.docx](https://file1.bingdoc.com/fileroot1/2023-5/4/8772342d-2a53-4831-9608-6fbff53d6fed/8772342d-2a53-4831-9608-6fbff53d6fed1.gif)
JTable不能正确显示标题
JTable不能正确显示标题,关于这个,官方文档里面有说:
JTable组件显示数据时,如果直接将其放置在Frame的contentPane中则表头一行会显示不出来,如果将其放置在JScrollPane中显示数据的话,表头会自动显示出来。
引用Sun的原话为:
It'seasytoputatableinascrollpane.Youneedjustoneortwolinesofcode:
JScrollPanescrollPane=newJScrollPane(table);
table.setPreferredScrollableViewportSize(newDimension(500,70));
Thescrollpaneautomaticallygetsthetable'sheader,whichdisplaysthecolumnnames,andputsitontopofthetable.Evenwhentheuserscrollsdown,thecolumnnamesremainvisibleatthetopoftheviewingarea.Thescrollpanealsotriestomakeitsviewingareathesameasthetable'spreferredviewingsize.Thepreviouscodesnippetsetsthetable'spreferredviewingsizewiththesetPreferredScrollableViewportSizemethod.
Ifyou'reusingatablewithoutascrollpane,thenyoumustgetthetableheadercomponentandplaceityourself.Forexample:
container.setLayout(newBorderLayout());
container.add(table.getTableHeader(),BorderLayout.PAGE_START);
container.add(table,BorderLayout.CENTER);在使用时要注意!
所以说使用JTable显示数据时,要将Table添加在JScrollPane里面;
但是我的代码里面还是显示不出来,开始检查原因:
原来:
如下添加table不行:
scrollPanel.add(table);
应该改为:
scrollPanel.setViewportView(table);//解决显示表头问题:
必须用这个
但是,这样似乎还是不行,在检查,在尝试,终于:
将scrollPane的setLayout(null);注释掉,再试,Ok;
&&&&&&&&&&&&&&&&&&&&&&&&&&&&
这里,针对我的问题总结三点:
:
1、用JScrollPane承接Table,不用JPanel等;
2、用JScrollPane的构造函数构建,或者用scrollPanel.setViewportView(table);
不用scrollPanel.add(table);
3、承接Table的父容器的布局管理器不能设置为null,其实,对于JScrollPane的布局,有专门的
scroll的布局,也可以用,简便的话,不设置布局;不要Null;
至此,Table和表头都可以正常显示了。
package stuinfosystem;
import java.awt.BorderLayout;
import java.awt.Frame;
import javax.swing.JDialog;
import javax.swing.JPanel;
import javax.swing.JTable;
import java.awt.Rectangle;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.JTableHeader;
import java.sql.ResultSet;
import java.sql.*;
import javax.swing.JScrollPane;
import java.awt.FlowLayout;
/**
*
Title:
*
*
Description:
*
*
Copyright:
Copyright (c) 2008
*
*
Company:
*
* @author not attributable
* @version 1.0
*/
public class CourseManageDialog extends JDialog {
JPanel panel1 = new JPanel();
//需要注意的地方
DefaultTableModel table=new DefaultTableModel();
JTable jTable1 = new JTable(table);
JTableHeader jTableHeader1 = jTable1.getTableHeader();
JScrollPane jScrollPane1 = new JScrollPane();
public CourseManageDialog(Frame owner, String title, boolean modal) {
super(owner, title, modal);
try {
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
jbInit();
pack();
} catch (Exception exception) {
exception.printStackTrace();
}
}
public CourseManageDialog() {
this(new Frame(), "CourseManageDialog", false);
}
private void jbInit() throws Exception {
panel1.setLayout(null);
jScrollPane1.setBounds(new Rectangle(2, 0, 329, 88));
this.getContentPane().add(jTableHeader1, java.awt.BorderLayout.NORTH);
this.getContentPane().add(panel1, java.awt.BorderLayout.CENTER);
panel1.add(jScrollPane1);
jScrollPane1.getViewport().add(jTable1);
//要注意的地方
table.addColumn("编号");
table.addColumn("学科名称");
table.addColumn("学分");
table.addColumn("课程性质");
String a="";
String b="";
int c;
int d;
String s1="select courseid,coursename,coursescore,coursecondition from course";
try {
ConnectDB.GetCon();
ResultSet rs = ConnectDB.ExecuteSql(s1);
while (rs.next()) {
a = rs.getString
(1);
b = rs.getString
(2);
c = rs.getInt(3);
d = rs.getInt(4);
//System.out.println(a+b+c+d);//test
//下面又是要注意的地方
Object[] cells = {a, b, c, d};
table.addRow(cells);
}
} catch (SQLException ex) {
ex.printStackTrace();
}
}
}
JTable中修改后的数据如何保存到数据库中?
点击19 回复0
∙快捷回复
123.158.38.*IP
发表于2010-03-0309:
25:
411
编了一个关于学生信息的程序,在对jtable插入,删除几行,修改数据以后,想点击“保存”按钮就能把Jtable中全部数据存到数据库中,替换数据库中原有数据。
我不知道该怎么做,网上找了好久也没找到。
一段代码如下:
classShowextendsJPanelimplementsActionListener{//显示学生信息
DefaultTableModeldtm;
JTabletable;
Objecta[][];
Objectname[]={"学号","姓名","性别","出生日期","民族","籍贯","专业","身高","体重"};
JButtonconserve,insert,del;
Connectioncon;
Statementsql;
ResultSetrs;
Show(){//把数据库中的数据放到JTable中
try{
con=DriverManager.getConnection("jdbc:
odbc:
hello","","");
sql=con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);
rs=sql.executeQuery("SELECT*FROMmessage");
rs.last();
intlastNumber=rs.getRow();
a=newObject[lastNumber][9];
intk=0;
rs.beforeFirst();
while(rs.next()){
a[k][0]=rs.getString
(1);
a[k][1]=rs.getString
(2);
a[k][2]=rs.getString(3);
a[k][3]=rs.getDate(4);
a[k][4]=rs.getString(5);
a[k][5]=rs.getString(6);
a[k][6]=rs.getString(7);
a[k][7]=rs.getDouble(8);
a[k][8]=rs.getDouble(9);
k++;
}
con.close();
}
catch(SQLExceptione){}
insert=newJButton("插入信息");
del=newJButton("删除信息");
conserve=newJButton("保存信息");
insert.addActionListener(this);
del.addActionListener(this);
conserve.addActionListener(this);
dtm=newDefaultTableModel(a,name);
table=newJTable(dtm);
JScrollPanejt=newJScrollPane(table);
setLayout(newBorderLayout());
add(jt,BorderLayout.NORTH);
JPaneljb=newJPanel();
jb.add(insert);
jb.add(del);
jb.add(conserve);
jb.setBackground(Color.pink);
add(jb,BorderLayout.CENTER);
setVisible(true);
validate();
}
publicvoidactionPerformed(ActionEvente){
if(e.getSource()==insert){//插入
intn=table.getSelectedRow();
dtm.insertRow(n+1,newObject[]{});
}
elseif(e.getSource()==del){//删除
intn=table.getSelectedRow();
dtm.removeRow(n);
}
elseif(e.getSource()==conserve){//保存
保存怎么写我就不知道了。
}
}
}
1.我有想过JTable里的数据放到一个二维数组中,再把二维数组导入数据库中,这样可不可行?
elseif(e.getSource()==conserve){
intn=table.getRowCount();
Objectb[][]=newObject[n][9];
for(inti=0;ifor(intj=0;j<9;j++)
b[i][j]=dtm.getValueAt(i,j);
}
这一段是不是把JTable里的数据放到一个二维数组中?
如果是,接下去该怎么写?
2.哪位能根据我的代码把保存的代码写出来?
elseif(e.getSource()==conserve){//保存
}
截图:
不要复制,粘贴,乱回答!
我看不到你哪里把数据插入到数据库了,也不见你修改,你只是把数据查询显示出来。
一步是不行的。
你应该分开几个JTextField输入值,然后拿JTextField.text
在保存/修改按钮事件
intresult=sql.executeUpdata("insertinto表()values('"+JTextField.text+"')");...
连接数据库与JTable
1连接数据库与JTable
1.1TableModel和读取数据库
TableModel定义了存入和管理数据的方法,它还能为每一列定义数据名,并且可以设置单元格是否可编辑。
它以一个二维数组的形式存入数据。
下面有我关于如何读取数据库资料到TableModel的一个例子:
publicclassTbModelextendsAbstractTableModel
{
privatestaticfinallongserialVersionUID=1L;
privateVectordata;
privateVectortitles;
Connectionconnect;
Statementstate;
ResultSetrs;
publicmyTableModel()
{
data=newVector();
try
{
Class.forName("com.mysql.jdbc.Driver");
connect=DriverManager.getConnection("jdbc:
mysql:
//localhost/javaproject","root","dddddd");
state=connect.createStatement();
rs=state.executeQuery("select*fromproduct");
while(rs.next())
{
data.add(rs.getString
(1));
data.add(rs.getString
(2));
data.add(rs.getString(3));
data.add(rs.getString(4));
data.add(rs.getString(5));
}
}
catch(ClassNotFoundExceptione)
{
System.out.println("JDBCdrivernotloaded:
\n"+e);
}
catch(SQLExceptione)
{
System.out.println("Connectionfailed:
\n"+e);
}
}
titles=newVector();
titles.add("CATEGORY");
titles.add("NAME");
titles.add("PRICES");
titles.add("QUANTITY");
titles.add("ADDRESS");
publicintgetRowCount()
{
returndata.size()/getColumnCount();
}
publicintgetColumnCount()
{
returntitles.size();
}
publicObjectgetValueAt(introwIndex,intcolumnIndex)
{
returndata.get((rowIndex*getColumnCount())+columnIndex);
}
publicStringgetColumnName(intcolumnIndex){
StringcolName=newString();
if(columnIndex<=getColumnCount())
colName=(String)titles.get(columnIndex);
returncolName;
}
}
当从AbstractTableModel继承一个类时,getRowCount(),getColumnCount(),和getValueAt(introwIndex,intcolumnIndex)等方法将自动建立(用Eclipse),记住上面所提的第三个方法,我们一会会用到。
另外在上面的类中,getColumnName(intcolumnIndex)方法是用来定义列名字的。
1.2通过TableModel连接数据库和JTable
接下来,你只需要把下列代码加入你的界面代码中就好:
2 读取你所选中单元格的值
2.1addMouseListener()方法
JTable可以用addMouseListenner()方法来监听鼠标动作,下面的代码是当鼠标点下时,返回鼠标所点的单元格的行列索引:
table.addMouseListener(newjava.awt.event.MouseAdapter(){
publicvoidmouseClicked(java.awt.event.MouseEvente)
{
introw=((JTable)e.getSource()).rowAtPoint(e.getPoint());
intcol=((JTable)e.getSource()).columnAtPoint(e.getPoint());
}
});
现在你可以得到行列索引row和col啦!
2.2 取得单元格里的值
你还记得上一章我让你记住的那个方法吗?
没错,getValueAt(introwIndex,intcolumnIndex)方法!
把row和col带入到这个方法中就能返回单元格中的值了。
JTabletable=newJTable(newTbModel())
当你改变数据库时,JTable里的数据没有跟着改变?
很简单的,别像我一样浪费两个礼拜找答案,把下面的两句话抄下来就好了:
table.setModel(newTbModel());
table.updateUI();
JTable在数据库中的应用
标签:
数据库取表格 在JTable中显示 分类:
技术