源码如下:
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;
}

解决方案 »

  1.   

    把这段程序直接考到你的编译器中。如果有oracle就select*from 你的库 。这段程序一点都不混乱。
      

  2.   

    你笔误了吧。原来:
    c.add(bottomPanel,BorderLayout.CENTER);//这里我都加上Panel了,
    改成:
    c.add(scroller, BorderLayout.CENTER);// 这里我都加上Panel了,
      

  3.   

    另外之前要把bottomPanel拿掉,虽然感觉这样写UI update很变扭
    c.remove(0);
      

  4.   

    jbInit()中:bottomPanel.add(table, java.awt.BorderLayout.CENTER);
    再把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了,  
     
      

  5.   

    wxisaac() ( ) 信誉:100  2007-09-15 18:42:28  得分: 0  
     
     
       另外之前要把bottomPanel拿掉,虽然感觉这样写UI update很变扭
    c.remove(0);
    ---------------------------------------------------------------
    我有拿掉啊。
    displayResultSet()中:
    Container c = getContentPane();
    c.remove(1);
      
     
      

  6.   

    1. 在我看来,要被拿掉的componet的index是0,1是topPanel,因为它在构造时是后加的。2. Scrollbar的显示有几种策略,默认的是只有需要的时候才显示,如果数据行数较少,列数也不多的话,就会隐藏。要一直显示,可以设置
    ScrollPane.getScrollbarDisplayPolicy(ScrollPane.SCROLLBARS_ALWAYS)3. 如果列数比较多,默认的也不会一开始出滚动条,而是把每一列都压得很窄。如果不喜欢这种情况,可以设置
    JTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF)
      

  7.   

    wxisaac() 谢谢你。给分了。程序我没有试,但是我向你应该已经说得差不多了。很靠铺。我给分了。如果再有问题,再向你请教好了。不知可否留个邮箱?