源码如下:
import java.sql.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.border.TitledBorder;
import com.borland.jbcl.layout.XYLayout;public class jAppletTest extends JApplet {
private Connection connection;
private Statement statement;
private ResultSet resultSet;
private ResultSetMetaData rsMetaData;//GUI变量定义
private JTable table = new JTable();
private JLabel title = new JLabel();
private JComboBox comboBox = new JComboBox();
private String test;
private TitledBorder titledBorder1 = new TitledBorder("");
private JPanel topPanel = new JPanel();
private JPanel bottomPanel = new JPanel();
private JScrollPane scroller;//private XYLayout xYLayout1 = new XYLayout(); public void init() {
//Form的标题
String url = "jdbc:oracle:thin:@localhost:1521:database";
String username = "system";
String password = "manager";
//加载驱动程序以连接数据库
try {
Class.forName( "oracle.jdbc.OracleDriver" );
connection = DriverManager.getConnection(
url, username, password );
}
//捕获加载驱动程序异常
catch ( ClassNotFoundException cnfex ) {
System.err.println(
"装载 JDBC/ODBC 驱动程序失败。" );
cnfex.printStackTrace();
System.exit( 1 ); // terminate program
}
//捕获连接数据库异常
catch ( SQLException sqlex ) {
System.err.println( "无法连接数据库" );
sqlex.printStackTrace();
System.exit( 1 ); // terminate program
}}public void destroy() {
shutDown();
}public void start(){}public void stop(){}public jAppletTest()
{
try {
jbInit();
}
catch (Exception ex) {
ex.printStackTrace();
} }private void getTable()
{
try {
//执行SQL语句
//String query = inputQuery.getText();
statement = connection.createStatement();
resultSet = statement.executeQuery( test );
//在表格中显示查询结果
displayResultSet( resultSet );
}
catch ( SQLException sqlex ) {
sqlex.printStackTrace();
}
}private void displayResultSet( ResultSet rs )
throws SQLException
{
//定位到达第一条记录
boolean moreRecords = rs.next();
//如果没有记录,则提示一条消息
if ( ! moreRecords ) {
JOptionPane.showMessageDialog( this,
"结果集中无记录" );return;
}
Vector columnHeads = new Vector();
Vector rows = new Vector();
try {
//获取字段的名称
ResultSetMetaData rsmd = rs.getMetaData();
for ( int i = 1; i <= rsmd.getColumnCount(); ++i )
columnHeads.addElement( rsmd.getColumnName( i ) );
//获取记录集
do {
rows.addElement( getNextRow( rs, rsmd ) );
} while ( rs.next() );
//在表格中显示查询结果
table = new JTable( rows, columnHeads );
scroller = new JScrollPane( table );
Container c = getContentPane();
c.remove(1);
c.add(topPanel,BorderLayout.NORTH);
c.add(bottomPanel,BorderLayout.CENTER);//这里我都加上Panel了,可看不到JTable组件,而且,bottomPanel 和 topPanel我也做过分别的validate和repaint()但是没有效果。只有将table直接的加到Container上才能看到效果。加到Panel上,再把Panel加到c上就看不到效果了。
c.validate();}
catch ( SQLException sqlex ) {
sqlex.printStackTrace();
}
}
private Vector getNextRow( ResultSet rs,
ResultSetMetaData rsmd )
throws SQLException
{
Vector currentRow = new Vector();
for ( int i = 1; i <= rsmd.getColumnCount(); ++i )
currentRow.addElement( rs.getString( i ) );
//返回一条记录
return currentRow;
}public void shutDown()
{
try {
//断开数据库连接
connection.close();
}
catch ( SQLException sqlex ) {
System.err.println( "Unable to disconnect" );
sqlex.printStackTrace();
}
} private void jbInit() throws Exception {
//如果数据库连接成功,则建立GUI
//SQL语句
test="SELECT * FROM \"SYS\".\"USER\"";
topPanel.setLayout( new BorderLayout() );
bottomPanel.setLayout(new BorderLayout());
title = new JLabel("烽火卫星侦察系统");
title.setFont(new java.awt.Font("华文彩云", Font.PLAIN, 20));
comboBox = new JComboBox();
comboBox.addItem("");
comboBox.addItem("密码库管理");
comboBox.addItem("报文库管理");
comboBox.addItem("目标库管理");
comboBox.addItem("关系网管理");
comboBox.addItemListener(new comboBoxListener(this)); table = new JTable();
bottomPanel.setBackground(Color.orange);
bottomPanel.setBorder(titledBorder1);
topPanel.setBackground(Color.red);
topPanel.setBorder(titledBorder1); topPanel.add(title,BorderLayout.WEST);
topPanel.add(comboBox, java.awt.BorderLayout.EAST);
bottomPanel.add(table, java.awt.BorderLayout.CENTER); Container c = getContentPane();
c.setLayout(new BorderLayout()); c.add( bottomPanel, BorderLayout.CENTER );
c.add(topPanel , BorderLayout.NORTH);
} public void comboBoxItemChange(ItemEvent e){ if(e.getStateChange() == ItemEvent.SELECTED){
String strItem = comboBox.getSelectedItem().toString();
if (strItem == "密码库管理")
this.getTable();
}
}}class comboBoxListener implements ItemListener{
public comboBoxListener(jAppletTest adaptee)
{
this.adaptee = adaptee;
}
public void itemStateChanged(ItemEvent e)
{
adaptee.comboBoxItemChange(e);
} private jAppletTest adaptee;
}
import java.sql.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.border.TitledBorder;
import com.borland.jbcl.layout.XYLayout;public class jAppletTest extends JApplet {
private Connection connection;
private Statement statement;
private ResultSet resultSet;
private ResultSetMetaData rsMetaData;//GUI变量定义
private JTable table = new JTable();
private JLabel title = new JLabel();
private JComboBox comboBox = new JComboBox();
private String test;
private TitledBorder titledBorder1 = new TitledBorder("");
private JPanel topPanel = new JPanel();
private JPanel bottomPanel = new JPanel();
private JScrollPane scroller;//private XYLayout xYLayout1 = new XYLayout(); public void init() {
//Form的标题
String url = "jdbc:oracle:thin:@localhost:1521:database";
String username = "system";
String password = "manager";
//加载驱动程序以连接数据库
try {
Class.forName( "oracle.jdbc.OracleDriver" );
connection = DriverManager.getConnection(
url, username, password );
}
//捕获加载驱动程序异常
catch ( ClassNotFoundException cnfex ) {
System.err.println(
"装载 JDBC/ODBC 驱动程序失败。" );
cnfex.printStackTrace();
System.exit( 1 ); // terminate program
}
//捕获连接数据库异常
catch ( SQLException sqlex ) {
System.err.println( "无法连接数据库" );
sqlex.printStackTrace();
System.exit( 1 ); // terminate program
}}public void destroy() {
shutDown();
}public void start(){}public void stop(){}public jAppletTest()
{
try {
jbInit();
}
catch (Exception ex) {
ex.printStackTrace();
} }private void getTable()
{
try {
//执行SQL语句
//String query = inputQuery.getText();
statement = connection.createStatement();
resultSet = statement.executeQuery( test );
//在表格中显示查询结果
displayResultSet( resultSet );
}
catch ( SQLException sqlex ) {
sqlex.printStackTrace();
}
}private void displayResultSet( ResultSet rs )
throws SQLException
{
//定位到达第一条记录
boolean moreRecords = rs.next();
//如果没有记录,则提示一条消息
if ( ! moreRecords ) {
JOptionPane.showMessageDialog( this,
"结果集中无记录" );return;
}
Vector columnHeads = new Vector();
Vector rows = new Vector();
try {
//获取字段的名称
ResultSetMetaData rsmd = rs.getMetaData();
for ( int i = 1; i <= rsmd.getColumnCount(); ++i )
columnHeads.addElement( rsmd.getColumnName( i ) );
//获取记录集
do {
rows.addElement( getNextRow( rs, rsmd ) );
} while ( rs.next() );
//在表格中显示查询结果
table = new JTable( rows, columnHeads );
scroller = new JScrollPane( table );
Container c = getContentPane();
c.remove(1);
c.add(topPanel,BorderLayout.NORTH);
c.add(bottomPanel,BorderLayout.CENTER);//这里我都加上Panel了,可看不到JTable组件,而且,bottomPanel 和 topPanel我也做过分别的validate和repaint()但是没有效果。只有将table直接的加到Container上才能看到效果。加到Panel上,再把Panel加到c上就看不到效果了。
c.validate();}
catch ( SQLException sqlex ) {
sqlex.printStackTrace();
}
}
private Vector getNextRow( ResultSet rs,
ResultSetMetaData rsmd )
throws SQLException
{
Vector currentRow = new Vector();
for ( int i = 1; i <= rsmd.getColumnCount(); ++i )
currentRow.addElement( rs.getString( i ) );
//返回一条记录
return currentRow;
}public void shutDown()
{
try {
//断开数据库连接
connection.close();
}
catch ( SQLException sqlex ) {
System.err.println( "Unable to disconnect" );
sqlex.printStackTrace();
}
} private void jbInit() throws Exception {
//如果数据库连接成功,则建立GUI
//SQL语句
test="SELECT * FROM \"SYS\".\"USER\"";
topPanel.setLayout( new BorderLayout() );
bottomPanel.setLayout(new BorderLayout());
title = new JLabel("烽火卫星侦察系统");
title.setFont(new java.awt.Font("华文彩云", Font.PLAIN, 20));
comboBox = new JComboBox();
comboBox.addItem("");
comboBox.addItem("密码库管理");
comboBox.addItem("报文库管理");
comboBox.addItem("目标库管理");
comboBox.addItem("关系网管理");
comboBox.addItemListener(new comboBoxListener(this)); table = new JTable();
bottomPanel.setBackground(Color.orange);
bottomPanel.setBorder(titledBorder1);
topPanel.setBackground(Color.red);
topPanel.setBorder(titledBorder1); topPanel.add(title,BorderLayout.WEST);
topPanel.add(comboBox, java.awt.BorderLayout.EAST);
bottomPanel.add(table, java.awt.BorderLayout.CENTER); Container c = getContentPane();
c.setLayout(new BorderLayout()); c.add( bottomPanel, BorderLayout.CENTER );
c.add(topPanel , BorderLayout.NORTH);
} public void comboBoxItemChange(ItemEvent e){ if(e.getStateChange() == ItemEvent.SELECTED){
String strItem = comboBox.getSelectedItem().toString();
if (strItem == "密码库管理")
this.getTable();
}
}}class comboBoxListener implements ItemListener{
public comboBoxListener(jAppletTest adaptee)
{
this.adaptee = adaptee;
}
public void itemStateChanged(ItemEvent e)
{
adaptee.comboBoxItemChange(e);
} private jAppletTest adaptee;
}
c.add(bottomPanel,BorderLayout.CENTER);//这里我都加上Panel了,
改成:
c.add(scroller, BorderLayout.CENTER);// 这里我都加上Panel了,
c.remove(0);
再把bottomPanel加到Container中。所以,
c.add(bottomPanel,BorderLayout.CENTER);//这里我都加上Panel了,
我也尝试过在displayResultSet()中:
bottomPanel.add(scroller, java.awt.BorderLayout.CENTER);
c.add(bottomPanel,BorderLayout.CENTER);
这样,bottomPanel确实可以看到。但是,scroller看不到。
---------------------------------------------------------------------
wxisaac() ( ) 信誉:100 2007-09-15 18:36:50 得分: 0
你笔误了吧。原来:
c.add(bottomPanel,BorderLayout.CENTER);//这里我都加上Panel了,
改成:
c.add(scroller, BorderLayout.CENTER);// 这里我都加上Panel了,
另外之前要把bottomPanel拿掉,虽然感觉这样写UI update很变扭
c.remove(0);
---------------------------------------------------------------
我有拿掉啊。
displayResultSet()中:
Container c = getContentPane();
c.remove(1);
ScrollPane.getScrollbarDisplayPolicy(ScrollPane.SCROLLBARS_ALWAYS)3. 如果列数比较多,默认的也不会一开始出滚动条,而是把每一列都压得很窄。如果不喜欢这种情况,可以设置
JTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF)