下面的代码是经过菜单事件调用,第一次调用的时候布局管理器可以使用,但过后再用的话布局完全混乱,搞不明白,代码如下,请各位给小弟讲解一下,谢谢了.
import java.awt.*;
import java.awt.event.*;
import java.sql.*;
import javax.swing.*;public class DelUser implements ActionListener {
private JLabel user = new JLabel("用户名:");
private JLabel pwd = new JLabel("口令:");

private JTextField _user = new JTextField(8);
private JPasswordField _pwd = new JPasswordField(8);

private JButton del_bt = new JButton("删除");

DBcon dbcon =  new DBcon();
Connection con = dbcon.getConnection();
PreparedStatement ps;
ResultSet rs;
String sql = "";
String inputValue = "";

GridBagLayout gbLayoutObj; 
    GridBagConstraints gbcObj;
    
    private JPanel panelObj = new JPanel();
private JFrame jFrame;

public DelUser(JFrame jFrame) {
     this.jFrame = jFrame;
    }
    
    public void actionPerformed(ActionEvent e) {   
     gbLayoutObj   = new GridBagLayout();
     gbcObj        = new GridBagConstraints();
     panelObj.setLayout(gbLayoutObj);
    
     gbcObj.anchor = GridBagConstraints.EAST;
     gbcObj.gridx  = 1;
     gbcObj.gridy  = 1;
     gbLayoutObj.setConstraints(user, gbcObj);
     gbcObj.gridy  = 2;
     gbLayoutObj.setConstraints(pwd, gbcObj);
    
     gbcObj.anchor = GridBagConstraints.WEST;
     gbcObj.gridx  = 2;
     gbcObj.gridy  = 1;
     gbLayoutObj.setConstraints(_user, gbcObj);
     gbcObj.gridy  = 2;
     gbLayoutObj.setConstraints(_pwd, gbcObj);
    
     gbcObj.anchor = GridBagConstraints.SOUTH;
     gbcObj.gridx  = 1;
     gbcObj.gridy  = 3;
     gbLayoutObj.setConstraints(del_bt, gbcObj);
    
     _user.setEnabled(false);
     _pwd.setEnabled(false);
    
     inputValue = JOptionPane.showInputDialog("请输入要删除用户的Id");
    
     if(inputValue == null) {    //对话框取消按钮事件
            return;
        } 
        
        if(inputValue.equals("")) { //对话框确定按钮事件
            JOptionPane.showMessageDialog(null, "请输入用户Id", "提示信息 ",JOptionPane.ERROR_MESSAGE);
            this.actionPerformed(e);
       }
       else {     
       try {
       sql = "select * from user where Id = ?";
       ps = con.prepareStatement(sql);
       ps.setString(1, inputValue);
       rs = ps.executeQuery();
      
       if(rs.next()) {
       panelObj.add(user);
     panelObj.add(_user);
     panelObj.add(pwd);
     panelObj.add(_pwd);
     panelObj.add(del_bt);
    
       _user.setText(rs.getString(2));
       _pwd.setText(rs.getString(3));
       del_bt.setEnabled(true);
       }
       else {
       JOptionPane.showMessageDialog(null, "用户不存在!");
       del_bt.setEnabled(false);
       }
      
       }
       catch(SQLException se) {
       System.out.println("error:" + se.getMessage());
       }
      
       }
      
       del_bt.addActionListener(
       new ActionListener() {
       public void actionPerformed(ActionEvent event) {
       if(JOptionPane.showConfirmDialog(null, "确定删除该用户?", "提示", JOptionPane.YES_NO_OPTION) == 1) {
       return;      
       }
       else {
       try {
       sql = "delete from user where Id = ?";
       ps = con.prepareStatement(sql);
       ps.setString(1, inputValue);
      
       int i = ps.executeUpdate();
      
       if(i > 0) {
       JOptionPane.showMessageDialog(null, "删除成功!");
       _user.setText("");
       _pwd.setText("");
       del_bt.setEnabled(false);
       }
       else {
       JOptionPane.showMessageDialog(null, "删除失败!");
       }
      
       }
       catch(SQLException se) {
       System.out.println("error:" + se.getMessage());
       }
       }    
      
       }
       }
      
       );
    
     jFrame.setContentPane(panelObj);
     jFrame.setVisible(true);
    }
    
}

解决方案 »

  1.   

    gbLayoutObj   = new GridBagLayout();
    看起来是不对的,不能每次都new一个。
      

  2.   


    另外,是不是不能区分:GridBagLayout和GridBagConstraints
    1、要明确一点概念:每个 GridBagLayout 对象维持一个动态的矩形单元网格,每个组件占用一个或多个这样的单元,称为显示区域。
    网格的总体方向取决于容器的 ComponentOrientation 属性。对于水平的从左到右的方向,网格坐标 (0,0) 位于容器的左上角,其中 X 向右递增,Y 向下递增。2、要使用GidBagLayout要先定义一个GridBagConstraints对象。
    java API说明如下:“每个由 GridBagLayout 管理的组件都与 GridBagConstraints 的实例相关联。Constraints 对象指定组件在网格中的显示区域以及组件在其显示区域中的放置方式。”
      

  3.   

    建议不要自己在手工代码中是用GridBagLayout,这玩意儿,是被设计给图形化设计工具用的。如果一直不清楚咋回事儿,建议直接用比如NetBean之类的玩意儿搞定它。