组件添加的奇怪问题,急,帮帮忙,谢!

whp320 2007-09-17 09:58:00
主要是界面部分的问题。在函数jbInit() 中

c.add( bottomPanel, BorderLayout.CENTER );
c.add(topPanel , BorderLayout.NORTH);
如果在后面再加上加上c.remove(bottomPanel);那么,界面就可以显示。但是,我在函数displayResultSet()中有代码:c.remove(bottomPanel);为什么这个删除不能离开jbInit()函数体,离开了就实效了?



代码如下,省略了数据库部分代码
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 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);
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;
}
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();
}
}

}
...全文
115 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
wzlsquall 2007-09-20
  • 打赏
  • 举报
回复
删除一个组建后,画面需要重新安排布局吧,在删除之后加一句validate()或repaint()试试

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧