JTable 不能正确显示标题.docx

上传人:b****1 文档编号:2866658 上传时间:2023-05-04 格式:DOCX 页数:38 大小:33.58KB
下载 相关 举报
JTable 不能正确显示标题.docx_第1页
第1页 / 共38页
JTable 不能正确显示标题.docx_第2页
第2页 / 共38页
JTable 不能正确显示标题.docx_第3页
第3页 / 共38页
JTable 不能正确显示标题.docx_第4页
第4页 / 共38页
JTable 不能正确显示标题.docx_第5页
第5页 / 共38页
JTable 不能正确显示标题.docx_第6页
第6页 / 共38页
JTable 不能正确显示标题.docx_第7页
第7页 / 共38页
JTable 不能正确显示标题.docx_第8页
第8页 / 共38页
JTable 不能正确显示标题.docx_第9页
第9页 / 共38页
JTable 不能正确显示标题.docx_第10页
第10页 / 共38页
JTable 不能正确显示标题.docx_第11页
第11页 / 共38页
JTable 不能正确显示标题.docx_第12页
第12页 / 共38页
JTable 不能正确显示标题.docx_第13页
第13页 / 共38页
JTable 不能正确显示标题.docx_第14页
第14页 / 共38页
JTable 不能正确显示标题.docx_第15页
第15页 / 共38页
JTable 不能正确显示标题.docx_第16页
第16页 / 共38页
JTable 不能正确显示标题.docx_第17页
第17页 / 共38页
JTable 不能正确显示标题.docx_第18页
第18页 / 共38页
JTable 不能正确显示标题.docx_第19页
第19页 / 共38页
JTable 不能正确显示标题.docx_第20页
第20页 / 共38页
亲,该文档总共38页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

JTable 不能正确显示标题.docx

《JTable 不能正确显示标题.docx》由会员分享,可在线阅读,更多相关《JTable 不能正确显示标题.docx(38页珍藏版)》请在冰点文库上搜索。

JTable 不能正确显示标题.docx

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;i

for(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中显示 分类:

技术

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2