本帖最后由 tianwailaikewbb 于 2011-11-09 00:12:13 编辑

解决方案 »

  1.   

    http://hi.csdn.net/space-6758047-do-album-picid-971986.html
    这是图片的链接地址
      

  2.   

    看了LZ发的界面原图,有一个问题:
    是否必须使用GridBagLayout来进行整体布局?
    因为根据图片,完全不必要用GridBagLayout来进行布局,当然,也不排除这是个练习GridBagLayout的例子。
      

  3.   

    嗯想用用GridBagLayout练习布局   求代码。。
      

  4.   

    这个界面,最下面两个按钮不适合放在整体的GridBagLayout布局中
      

  5.   

    一下代码看是否符合LZ的需求:package test;import java.awt.Container;
    import java.awt.Dimension;
    import java.awt.FlowLayout;
    import java.awt.GridBagConstraints;
    import java.awt.GridBagLayout;
    import java.awt.Insets;import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JList;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    import javax.swing.JTextArea;
    import javax.swing.border.TitledBorder;public class TestGridBagLayout {
    /**
    * @param args
    */
    public static void main(String[] args) {
    JFrame frame = new JFrame();
    frame.setLocation(450,300);
    Container c = frame.getContentPane();
    JPanel panel=new JPanel();
    panel.setBorder(new TitledBorder(""));
    GridBagLayout bg=new GridBagLayout();
    panel.setLayout(bg);
    GridBagConstraints bgc=new GridBagConstraints();

    Insets insets = new Insets(10,5,0,5);
    bgc.insets = insets ;


    JLabel label=new JLabel("显示消息"); 
    bgc.gridx=0;
    bgc.gridy=0;
    bgc.weightx=0.7;
    bgc.weighty=0.05;
    panel.add(label,bgc);

    JLabel label2=new JLabel("在线好友"); 
    bgc.gridx=1;
    bgc.gridy=0;
    bgc.weightx=0.3;
    panel.add(label2,bgc);

    bgc.fill = GridBagConstraints.BOTH;
    JTextArea area1=new JTextArea(); 
    area1.setBorder(new TitledBorder(""));
    area1.setLineWrap(true);
    JScrollPane sp = new JScrollPane(area1); 
    bgc.gridx=0;
    bgc.gridy=1;
    bgc.weightx=0.7;
    bgc.weighty=0.6;
    panel.add(area1,bgc);

    String item[]={"ddd","eee","ttt","bbb"};
    JList list=new JList(item); 
    list.setBorder(new TitledBorder(""));
    list.setPreferredSize(new Dimension(100,70));
    bgc.gridx=1;
    bgc.gridy=1;
    bgc.weightx=0.3;
    panel.add(list,bgc);

    JTextArea area2=new JTextArea();
    area2.setBorder(new TitledBorder(""));
    area2.setLineWrap(true);
    JScrollPane sp2=new JScrollPane(area2); 
    bgc.gridx=0;
    bgc.gridy=2;
    bgc.gridwidth=2;
    bgc.weighty=0.3;
    panel.add(area2,bgc);

    bgc.gridx=0;
    bgc.gridy=3;
    bgc.gridwidth=2;
    bgc.weighty=0.05;
    JPanel bottomPanel = new JPanel();
    bottomPanel.setLayout(new FlowLayout());
    JButton button1=new JButton("sent"); 
    JButton button2=new JButton("exit"); 
    bottomPanel.add(button1);
    bottomPanel.add(button2);
    panel.add(bottomPanel,bgc);

    c.add(panel);

    frame.pack();
    frame.setSize(500,300);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);
    }
    }
      

  6.   

    谢谢哈。。在你的基础上修改了一下、、、  但还是有一个功能无法实现。。希望在上下两个文本区域增加 分割条JSplitPane,用户可以上下拉动改变两个文本区域的大小。   
    是不是要分别设置上下两个面板?那原来的位置,特别下面文本区域的位置是否会改变啊?求代码。package swing;
    import java.awt.Container;
    import java.awt.Dimension;
    import java.awt.FlowLayout;
    import java.awt.GridBagConstraints;
    import java.awt.GridBagLayout;
    import java.awt.Insets;import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JList;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    import javax.swing.JTextArea;
    import javax.swing.border.TitledBorder;public class chatwin {
        /**
        * @param args
        */
        public static void main(String[] args) {
            JFrame frame = new JFrame();
            frame.setLocation(450,300);
            Container c = frame.getContentPane();
            JPanel panel=new JPanel();
            panel.setBorder(new TitledBorder(""));
            GridBagLayout bg=new GridBagLayout();
            panel.setLayout(bg);
            GridBagConstraints bgc=new GridBagConstraints();
        
            Insets insets = new Insets(10,5,0,5);
            bgc.insets = insets ;
            
            
            JLabel label=new JLabel("显示消息"); 
            bgc.gridx=0;
            bgc.gridy=0;
            //bgc.weightx=100;
            //bgc.weighty=100;
            //bgc.anchor=GridBagConstraints.NORTH;
            panel.add(label,bgc);
        
            JLabel label2=new JLabel("在线好友"); 
            bgc.gridx=1;
            bgc.gridy=0;
            //bgc.weightx=100;
            //bgc.weighty=0.7;
            //bgc.anchor=GridBagConstraints.NORTH;
            panel.add(label2,bgc);
        
            bgc.fill = GridBagConstraints.BOTH;
            JTextArea area1=new JTextArea(); 
            area1.setBorder(new TitledBorder(""));
            area1.setLineWrap(true);
            area1.setEditable(false);
            JScrollPane sp = new JScrollPane(area1); 
            bgc.gridx=0;
            bgc.gridy=1;
            bgc.weightx=100;
            bgc.weighty=100;
            panel.add(sp,bgc);
        
            String item[]={"ddd","eee","ttt","bbb"};
            JList list=new JList(item); 
            list.setBorder(new TitledBorder(""));
            list.setPreferredSize(new Dimension(100,70));
            JScrollPane pane=new JScrollPane(list);
            bgc.gridx=1;
            bgc.gridy=1;
            bgc.fill=GridBagConstraints.BOTH;
            bgc.weightx=0;
            bgc.weighty=0;
            panel.add(pane,bgc);
            
            JTextArea area2=new JTextArea();
            area2.setBorder(new TitledBorder(""));
            area2.setLineWrap(true);
            JScrollPane sp2=new JScrollPane(area2); 
            //JScrollPane pane1=new JScrollPane(sp2);
            bgc.gridx=0;
            bgc.gridy=2;
            bgc.gridwidth=2;
            bgc.weightx=0;
            bgc.weighty=0;
            panel.add(sp2,bgc);
            
            bgc.gridx=0;
            bgc.gridy=3;
            bgc.gridwidth=2;
            bgc.weighty=0.05;
            JPanel bottomPanel = new JPanel();
            bottomPanel.setLayout(new FlowLayout());
            JButton button1=new JButton("sent"); 
            JButton button2=new JButton("exit"); 
            bottomPanel.add(button1);
            bottomPanel.add(button2);
            panel.add(bottomPanel,bgc);
            
            c.add(panel);
        
            //frame.pack();
            frame.setSize(500,300);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setVisible(true);
        }
    }
      

  7.   

    要是用SplitPane分隔开上下两个panel的话,还是别用GridBagLayout了,属于自己找麻烦。
      

  8.   

    GridBagLayout基本就可以不用 好多培训课程都说其他三个就够用了
      

  9.   

    import java.awt.Color;
    import java.awt.Graphics;
    import javax.swing.JFrame;
    public class TankClient extends JFrame { int x=80,y=80;

    public void launch(){
    //setLocation(400, 300);
    setSize(700,800);
    setLocationRelativeTo(null);  //jframe居中显示
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setResizable(false);  //jframe不可改变大小
    setBackground(Color.YELLOW);
    setVisible(true);
    Thread t=new Thread(new RunTank());
    t.start();
    }

    //画坦克
    public void paint(Graphics g){
    Color c=g.getColor();
    System.out.println(g);
    g.setColor(Color.red);
    g.fillOval(x,y, 40, 40);
    g.setColor(c);
    System.out.println("**********************");
    System.out.println(g);
    y+=20;
    }

    //坦克运动
    class RunTank implements Runnable{ public void run() {
    while(true) {
    repaint();
    try {
    Thread.sleep(100);
    } catch (InterruptedException e) {
    e.printStackTrace();
    }
    }
    }
    }


    public static void main(String[] args) { TankClient tan= new TankClient();
    tan.launch(); }
    }