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;iTabCl
隐式扩展对象
,而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;另请参阅。