Java 如何在适配器类中设置JTable并在主类中调用它

Java 如何在适配器类中设置JTable并在主类中调用它,java,swing,jtable,Java,Swing,Jtable,我正在研究适配器类。 我在适配器类TabCl中创建了JTable,并在父类方法guiInt()中调用了JTable类TabCl,并将其添加到容器con.add() 我是Java新手,对Java没有扎实的知识。请检查以下代码,并提供一些帮助或可以使其工作的东西。 我的java版本是1.6 import javax.swing.*; import javax.swing.GroupLayout.Alignment; import java.awt.*; import java.awt.event.*

我正在研究适配器类。 我在适配器类
TabCl
中创建了
JTable
,并在父类方法
guiInt()
中调用了
JTable
TabCl
,并将其添加到容器
con.add()

我是Java新手,对Java没有扎实的知识。请检查以下代码,并提供一些帮助或可以使其工作的东西。 我的java版本是1.6

import javax.swing.*;
import javax.swing.GroupLayout.Alignment;
import java.awt.*;
import java.awt.event.*;
import java.sql.*;
import java.util.*;

public class PersonProject {

    JFrame myFrame;
    Container cont;
    BorderLayout bl;
    GroupLayout gl;
    FlowLayout fl;
    JTable tl;
    JScrollPane jsp;
    JPanel flPanel, glPanel, jTPane;
    JLabel lId;
    JTextField tId;
    // Db variable Declaration
    Connection dbCon;
    String url;
    String con;
    String sql;
    ResultSet rs;
    ResultSetMetaData rsmd;
    PreparedStatement pstmt;
    Vector columnName, data, row;
    int columnCount;

    public PersonProject() {
        guiInt();
    }

    public void guiInt() {
        myFrame = new JFrame();
        glPanel = new JPanel();
        cont = new Container();
        bl = new BorderLayout();
        fl = new FlowLayout();

        flPanel = new JPanel();
        flPanel.setLayout(fl);

        cont = myFrame.getContentPane();
        cont.setLayout(bl);

        gl = new GroupLayout(glPanel);
        glPanel.setLayout(gl);

        gl.setAutoCreateGaps(true);
        gl.setAutoCreateContainerGaps(true);

        lId = new JLabel("Id");
        tId = new JTextField();
        // /////////
        GroupLayout.SequentialGroup hGroup = gl.createSequentialGroup();
        hGroup.addGroup(gl.createParallelGroup().addComponent(lId));
        hGroup.addGroup(gl.createParallelGroup().addComponent(tId));
        gl.setHorizontalGroup(hGroup);

        GroupLayout.SequentialGroup vGroup = gl.createSequentialGroup();
        vGroup.addGroup(gl.createParallelGroup(Alignment.BASELINE)
            .addComponent(lId).addComponent(tId));
        gl.setVerticalGroup(vGroup);
        // ///////
        TabCl tlb = new TabCl();// / class for making jatable

        cont.add(flPanel, bl.NORTH);
        cont.add(glPanel, bl.CENTER);
        cont.add(tlb, bl.SOUTH);//// error at this point

        myFrame.pack();
        myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        myFrame.setVisible(true);
        myFrame.setSize(600, 300);
    }// end of method guiinit

    private class TabCl {// start of adapter class for making jtable

        public TabCl() {

            try {
                Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
                url = "jdbc:odbc:personDSN";
                dbCon = DriverManager.getConnection(url);
                sql = "select * from emp";
                pstmt = dbCon.prepareStatement(sql,
                    ResultSet.TYPE_SCROLL_INSENSITIVE,
                    ResultSet.CONCUR_UPDATABLE);

                rs = pstmt.executeQuery();
                rsmd = rs.getMetaData();
                columnCount = rsmd.getColumnCount();
                columnName = new Vector(columnCount);

                for (int i = 1; i <= columnCount; i++) {
                    columnName.add(rsmd.getColumnName(i));
                }// end of for loop
                System.out.println(columnName.get(1));

                data = new Vector();
                row = new Vector();
                while (rs.next()) {

                    row = new Vector(columnCount);

                    for (int i = 1; i <= columnCount; i++) {
                        row.add(rs.getString(i));
                    }
                    data.add(row);
                }// end of while loop
                dbCon.close();
            } catch (Exception ex) {
                System.out.println(ex + ":Sql Exception at table level");
            }

            tl = new JTable(data, columnName);
            jsp = new JScrollPane(tl);
            jTPane = new JPanel();
            tl.setPreferredScrollableViewportSize(new Dimension(500, 90));
            tl.setVisible(true);
            tl.setFillsViewportHeight(true);
            jTPane.add(jsp);

        }// end of method tabmethod
    }// end of class TabCl

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        PersonProject perProj = new PersonProject();
    }
}
import javax.swing.*;
导入javax.swing.GroupLayout.Alignment;
导入java.awt.*;
导入java.awt.event.*;
导入java.sql.*;
导入java.util.*;
公共类人事项目{
JFrame-myFrame;
集装箱运输;
边界布局bl;
分组布局;
流程布局fl;
JTable-tl;
JScrollPane-jsp;
JPanel flPanel、glPanel、jTPane;
JLabel盖;
JTextField-tId;
//Db变量声明
连接dbCon;
字符串url;
字符串con;
字符串sql;
结果集rs;
结果元数据rsmd;
编制报表;
向量列名称、数据、行;
int列计数;
公共人员项目(){
guiInt();
}
公共void guiInt(){
myFrame=newjframe();
glPanel=newjpanel();
cont=新容器();
bl=新边界布局();
fl=新的FlowLayout();
flPanel=新的JPanel();
flPanel.setLayout(fl);
cont=myFrame.getContentPane();
连续设置布局(bl);
gl=新的组布局(glPanel);
glPanel.setLayout(gl);
gl.设置自动创建间隙(真);
总账setAutoCreateContainerGaps(真);
lId=新的JLabel(“Id”);
tId=新的JTextField();
// /////////
GroupLayout.SequentialGroup hGroup=gl.CreateSquentialGroup();
hGroup.addGroup(gl.createParallelGroup().addComponent(lId));
hGroup.addGroup(gl.createParallelGroup().addComponent(tId));
gl.setHorizontalGroup(hGroup);
GroupLayout.SequentialGroup vGroup=gl.CreateSquentialGroup();
vGroup.addGroup(gl.createParallelGroup(Alignment.BASELINE)
.addComponent(lId.addComponent(tId));
gl.设置垂直组(vGroup);
// ///////
TabCl tlb=new TabCl();///用于生成jatable的类
续加(北区flPanel);
继续添加(glPanel,bl.CENTER);
cont.add(tlb,bl.SOUTH);///此时出错
myFrame.pack();
myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
myFrame.setVisible(true);
myFrame.setSize(600300);
}//结束方法guiinit
私有类TabCl{//使jtable的适配器类的开始
公共TabCl(){
试一试{
forName(“sun.jdbc.odbc.JdbcOdbcDriver”);
url=“jdbc:odbc:personDSN”;
dbCon=DriverManager.getConnection(url);
sql=“从emp中选择*”;
pstmt=dbCon.prepareStatement(sql,
ResultSet.TYPE\u SCROLL\u不敏感,
结果集CONCUR_可更新);
rs=pstmt.executeQuery();
rsmd=rs.getMetaData();
columnCount=rsmd.getColumnCount();
columnName=新向量(columnCount);

for(int i=1;i
TabCl
隐式扩展
对象
,而
add()
需要一个
组件
。而不是此组件:

private class TabCl {…}
创建一个返回
JPanel
的工厂方法,如下所示:

private JPanel createTablePanel() {
    …
    jTPane.add(jsp);
    return jTPane;
}// end of method createTablePanel
JPanel tlb = createTablePanel();
cont.add(flPanel, bl.NORTH);
cont.add(glPanel, bl.CENTER);
cont.add(tlb, bl.SOUTH);//// error at this point
然后像这样使用它:

private JPanel createTablePanel() {
    …
    jTPane.add(jsp);
    return jTPane;
}// end of method createTablePanel
JPanel tlb = createTablePanel();
cont.add(flPanel, bl.NORTH);
cont.add(glPanel, bl.CENTER);
cont.add(tlb, bl.SOUTH);//// error at this point

另请参见引用的
JDBCAdapter

Thanx以获取您的答复。工作完成。但是,您是否可以发送一些链接来阅读此特定工厂方法。它的用法,它是什么,它可以在哪里使用,以及一些更多的解释。Thanx为您提供帮助。Thanx。工作完成。但是,您是否可以从我的位置向我发送一些链接或类似的内容可以理解此“工厂方法”的用法和一些详细信息。@usmannewton:上面的
..
是您现有的
TabCl
构造函数代码。@usmannewton;另请参阅。