class java.awt.GridBagLayout, class java.awt.GridBagConstraints
This layout extends the capabilities of GridLayout to become constraints-based. It breaks the container's space into equal rectangular pieces (like bricks in a wall) and places each component in one or more of these pieces. You need to create and fill a GridBagConstraints object for each component to inform GridBagLayout how to place and size that component.GridBagLayout can be effectively used for placement of components, if no special behavior is required on resizing. However, due to it's complexity it usually requires some helper methods or classes to handle all necessary constraints information. James Tan, a usability expert and GridBagLayout extraordinaire, gives a comprehensive overview of this manager in section 4.3. He also presents a helper class to ease the burden of dealing with GridBagConstraints.

解决方案 »

  1.   

    我建议你看看:JAVA 2图形设计 卷2,SWING!!!很详细!!!我这里有一个例子!import java.text.*;
    import java.io.*;
    import java.util.*;
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import javax.swing.border.*;
    import javax.swing.event.*;
    import javax.swing.tree.*;
    import java.sql.*;
    import packages.*;public class effective extends JFrame implements ActionListener,MenuListener
    {
    final static String aboutallstring="     Version 1.0";
    final static ImageIcon aboutallimageicon=new ImageIcon("images/b.gif"); public static void main(String[] args)
    {
    JFrame effectiveFrame=new effective();
    effectiveFrame.show();
    } public effective()
    {
    setTitle("d"); Toolkit tk=Toolkit.getDefaultToolkit();
    Dimension d=tk.getScreenSize();
    int screenHeight=d.height;
    int screenWidth=d.width;
    setSize(screenWidth,screenHeight-25);
    setLocation(0,0); Image imgIcon=tk.getImage("images/b.gif");
    setIconImage(imgIcon);
    addWindowListener(new WindowAdapter()
       {
        public void windowClosing(WindowEvent e)
        {
        System.exit(0);
        }
    }); if((new File("effective.txt")).exists())
            {
             (new File("effective.txt")).delete();
            } effectiveBar=new JMenuBar();
    setJMenuBar(effectiveBar); JMenu effectiveSystemMenu=new JMenu("系统(S)");
    effectiveSystemMenu.setMnemonic('S');
    effectiveSystemMenu.addMenuListener(this); JMenuItem exitMenuItem=new JMenuItem("退出(X)");
    exitMenuItem.setMnemonic('X'); effectiveBar.add(makeMenu(effectiveSystemMenu,new Object[] {exitMenuItem},this)); JMenu effectiveHelpMenu=new JMenu("帮助(H)");
    effectiveHelpMenu.setMnemonic('h');
    effectiveHelpMenu.addMenuListener(this);                JMenuItem effectiveIndexMenuItem=new JMenuItem("索引(I)",'I');
    effectiveIndexMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F1,0));
    JMenuItem effectiveHelpMenuItem=new JMenuItem("关于(A)...",'A');
            effectiveBar.add(makeMenu(effectiveHelpMenu,new Object[]
      {
       effectiveIndexMenuItem,
       null,
       effectiveHelpMenuItem
      },this)); getContentPane().setLayout(new GridBagLayout()); effectiveApp=new JLabel("应用程序:fjfj成工具");
    effectiveApp.setToolTipText("fhjfgjhfjh生成工具"); effectiveCBR=new JButton("匹配现有dhgdfg产品(P)",new ImageIcon("images/right.gif"));
    effectiveCBR.setHorizontalTextPosition(AbstractButton.LEFT);
    effectiveCBR.setToolTipText("与现有的fhgd产品进行匹配");
    effectiveCBR.setMnemonic('P'); cbrValues=new JButton("查看其d技术参数",new ImageIcon("images/NextArrow.gif"));
    cbrValues.setHorizontalTextPosition(AbstractButton.LEFT);
    cbrValues.setVisible(false); effectiveAdding=new JButton("增加兄d弟节点(A)",new ImageIcon("images/NextArrow.gif"));
    effectiveAdding.setMnemonic('A');
    effectiveAdding.setEnabled(false);
    effectiveAdding.setToolTipText("增加兄弟节点");
    effectiveAdding.setHorizontalTextPosition(AbstractButton.LEFT); effectiveAdding.addActionListener(new ActionListener()
    {
    public void actionPerformed(ActionEvent e)
    {
    selectedNode=(DefaultMutableTreeNode)effectiveTree.getLastSelectedPathComponent();
    if(selectedNode==null) return;
    DefaultMutableTreeNode newNode=new DefaultMutableTreeNode("待编辑节点");
    DefaultMutableTreeNode parent=(DefaultMutableTreeNode)selectedNode.getParent();
    if(parent!=null)
    {
    int selectedIndex=parent.getIndex(selectedNode);
    model.insertNodeInto(newNode,parent,selectedIndex+1);
    }
    TreeNode[] nodes=model.getPathToRoot(newNode);
    TreePath paths=new TreePath(nodes);
    effectiveTree.scrollPathToVisible(paths);
    }
    }); effectiveAddingChild=new JButton("增加子节点   (C)",new ImageIcon("images/NextArrow.gif"));
    effectiveAddingChild.setMnemonic('C');
    effectiveAddingChild.setEnabled(false);
    effectiveAddingChild.setToolTipText("增加子节点");
    effectiveAddingChild.setHorizontalTextPosition(AbstractButton.LEFT); effectiveAddingChild.addActionListener(new ActionListener()
    {
    public void actionPerformed(ActionEvent e)
    {
    selectedNode=(DefaultMutableTreeNode)effectiveTree.getLastSelectedPathComponent();
    if(selectedNode==null) return;
    DefaultMutableTreeNode newNode=new DefaultMutableTreeNode("待编辑节点");
    model.insertNodeInto(newNode,selectedNode,selectedNode.getChildCount());
    TreeNode[] nodes=model.getPathToRoot(newNode);
    TreePath paths=new TreePath(nodes);
    effectiveTree.scrollPathToVisible(paths);
    }
    }); effectiveDeleting=new JButton("减少节点      (D)",new ImageIcon("images/PreviousArrow.gif"));
    effectiveDeleting.setMnemonic('D');
    effectiveDeleting.setEnabled(false);
    effectiveDeleting.setToolTipText("减少节点");
    effectiveDeleting.setHorizontalTextPosition(AbstractButton.LEFT); effectiveDeleting.addActionListener(new ActionListener()
    {
    public void actionPerformed(ActionEvent e)
    {
    selectedNode=(DefaultMutableTreeNode)effectiveTree.getLastSelectedPathComponent();
      

  2.   

    if(selectedNode==null) return;
    if(selectedNode.getParent()!=null)
    {
    model.removeNodeFromParent(selectedNode);
    }
    }
    });
    effectiveStatus=new JLabel("工业缝纫机概念设计工具");
    effectiveStatus.setIcon(new ImageIcon("images/icon.gif"));
    effectiveStatus.setToolTipText("有效概念空间生成工具"); effectiveFinishing=new JButton("完  成           (F)",new ImageIcon("images/finish.gif"));
    effectiveFinishing.setMnemonic('F');
    effectiveFinishing.setEnabled(false);
    effectiveFinishing.setToolTipText("完成有效概念空间的生成");
    effectiveFinishing.setHorizontalTextPosition(AbstractButton.LEFT); effectiveFinishing.addActionListener(new ActionListener()
    {
    public void actionPerformed(ActionEvent e)
    {
    Enumeration breadf=((DefaultMutableTreeNode)model.getRoot()).breadthFirstEnumeration();
    while(breadf.hasMoreElements())
    {
    try
    {
    PrintWriter out=new PrintWriter(new FileWriter("effective.txt",true));
    if(breadf.nextElement().toString().equals("挑线杆"))
    {
    out.println(breadf.nextElement().toString());
    while(breadf.hasMoreElements())
    {
    out.println(breadf.nextElement().toString());
    }
    }
    out.close();
    }
    catch(IOException eee)
    {
    }
    }
    System.exit(0);
    }
    }); effectiveTree=new JTree();
    effectiveTree.setModel(null);
    effectiveTree.setEnabled(false);
    effectiveScrollPane=new JScrollPane(effectiveTree);
    effectiveScrollPane.setBorder(new TitledBorder("生成有效概念空间"));                gbcInstance=new GridBagConstraints(); gbcInstance.insets.left=2;
    gbcInstance.insets.right=2;
    gbcInstance.insets.top=2;
    gbcInstance.insets.bottom=2; gbcInstance.weightx=100;
    gbcInstance.weighty=0;
    gbcInstance.fill=GridBagConstraints.BOTH;
    gbcInstance.anchor=GridBagConstraints.NORTH; add(effectiveApp,gbcInstance,0,0,7,1);
    add(effectiveStatus,gbcInstance,0,14,7,1); gbcInstance.fill=GridBagConstraints.NONE;
    gbcInstance.weightx=0;
    gbcInstance.anchor=GridBagConstraints.EAST;
    add(effectiveCBR,gbcInstance,0,1,1,1);
    add(cbrResultting,gbcInstance,2,1,1,1);
    add(cbrValues,gbcInstance,6,1,1,1); gbcInstance.fill=GridBagConstraints.BOTH;
    gbcInstance.weightx=100;
    gbcInstance.weighty=100;
    add(effectiveScrollPane,gbcInstance,0,2,6,10); gbcInstance.fill=GridBagConstraints.NONE;
    gbcInstance.anchor=GridBagConstraints.EAST;
    gbcInstance.weightx=0;
    gbcInstance.weighty=0;
    add(effectiveFinishing,gbcInstance,6,12,1,1); add(new JLabel(" "),gbcInstance,6,2,1,1);
    add(new JLabel(" "),gbcInstance,6,3,1,1);
    add(effectiveAdding,gbcInstance,6,4,1,1);
    add(effectiveAddingChild,gbcInstance,6,5,1,1);
    add(effectiveDeleting,gbcInstance,6,6,1,1); effectiveCBR.addActionListener(this);
    } public void add(Component c,GridBagConstraints gbc,int x,int y,int w,int h)
    {
    gbc.gridx=x;
    gbc.gridy=y;
    gbc.gridwidth=w;
    gbc.gridheight=h;
    getContentPane().add(c,gbc);
    } public void actionPerformed(ActionEvent evt)
    {
    String arg=evt.getActionCommand();
    if(arg.equals("退出(X)"))
    {
    System.exit(0);
    }
    if(arg.equals("关于(A)..."))
    {
    Aboutall effectiveAboutall=new Aboutall(this,aboutallimageicon,aboutallstring);
    effectiveAboutall.show();
    }
    if(arg.equals("匹配现有产品(P)"))
    {
    if(JOptionPane.showConfirmDialog(null,
    message,
    messageTitle,
    JOptionPane.YES_NO_OPTION,
    JOptionPane.WARNING_MESSAGE,
    new ImageIcon("images/cross.gif"))
    ==JOptionPane.YES_OPTION)
    {
    messageCBR();
    }
            }
    } public void messageCBR()
    {
    messageProgressBar=new JProgressBar();
    messageProgressBar.setMaximum(1000);
    messageProgressBar.setStringPainted(true);
    messageProgressBar.setToolTipText("匹配进度");
    messageProgressBar.setBorder(new TitledBorder("匹配进度:")); messageComboBox=new JComboBox();
    messageComboBox.setBorder(new TitledBorder("匹配结果:"));
    messageComboBox.setToolTipText("匹配结果");
    messageComboBox.setEditable(false); messageStart=new JButton("开始(S)");
    messageStart.setMnemonic('S');
    messageStart.setToolTipText("开始匹配现有产品");
    messageOK=new JButton("确定(Y)");
    messageOK.setMnemonic('Y');
    messageOK.setEnabled(false);
    messageOK.setToolTipText("选择特定的产品方案");
    messageCancels=new JButton("取消(N)");
    messageCancels.addActionListener(new ActionListener()
    {
    public void actionPerformed(ActionEvent e)
    {
    messageDialog.dispose();
    }
    }
    );
    messageStart.addActionListener(new ActionListener()
    {
    public void actionPerformed(ActionEvent e)
    {
    messageResults=effectivesql.sqlresult();
    for(int i=0;i<9;++i)
    {
    messageProgressBar.setValue((i+1)*1000/9);
    } DecimalFormat df=new DecimalFormat("%"); messageCBString=effectivesql.messagemess;
    messagecbrStr=new String[messageCBString.length];
    System.arraycopy(messageCBString,0,messagecbrStr,0,messagecbrStr.length);
    for(int k=0;k<messageCBString.length;++k)
    {
    messageCBString[k]=messageCBString[k].substring(0,messageCBString[k].length()-1)+messageEmptyString[k]+df.format(messageResults[k]);
    } for(int j=0;j<9;j++)
    {
    messageComboBox.addItem(messageCBString[j]);
    }
    if(messageProgressBar.getValue()==1000)
    {
    messageStart.setEnabled(false);
    messageOK.setEnabled(true);
    }
    }
    });
    messageOK.addActionListener(new ActionListener()
    {
    int indexs;
    public void actionPerformed(ActionEvent e)
    {
    indexs=messageComboBox.getSelectedIndex();
    model=new DefaultTreeModel(effectiveTrees.makeTrees(messagecbrStr[indexs].substring(0,messagecbrStr[indexs].length()-1)));
    cbrResultting.setText("最终匹配产品: "+messagecbrStr[indexs].substring(0,messagecbrStr[indexs].length()-1));
    effectiveTree.setEnabled(true);
    effectiveTree.setModel(model);
    effectiveTree.setEditable(true);
    effectiveCBR.setEnabled(false);
    effectiveAdding.setEnabled(true);
    effectiveDeleting.setEnabled(true);
    effectiveAdding.setEnabled(true);
    effectiveAddingChild.setEnabled(true);
    cbrValues.setVisible(true);
    effectiveFinishing.setEnabled(true);
    messageDialog.dispose();
    }
    }); messageCancels.setMnemonic('N');
    messageCancels.setToolTipText("取消该步操作"); GridBagConstraints messageInstance=new GridBagConstraints();
    messageDialog=new JDialog(this,"匹配现有产品",true);
    messageDialog.setSize(400,240);
    messageDialog.setLocation(Toolkit.getDefaultToolkit().getScreenSize().width/2-200,
                              Toolkit.getDefaultToolkit().getScreenSize().height/5);
    Container messagecontentPane=messageDialog.getContentPane();
    messagecontentPane.setLayout(new GridBagLayout()); messageInstance.insets.left=2;
    messageInstance.insets.right=2;
    messageInstance.insets.top=2;
    messageInstance.insets.bottom=2;