任务目标:
建立一个窗口。从上至下一次显示4个文本框。其中第二个文本框高度是其他3个的2倍。问题:附上代码。黏贴复制下,帮忙运行下。运行出来就懂了。
求帮忙解决。最好能在改的地方注释下。一个小问题。
import java.awt.*;
import javax.swing.*;public class ChatWnd 
{
public static void main(String args[])
{
CreateWnd ChatWindow = new CreateWnd();

}
}//a class in order to just create a window
class CreateWnd 
{
public  CreateWnd()
{
//顶层容器制定
JFrame app = new JFrame("连通Chat");
//Container c = getContentPane();
app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
app.setSize(640, 160);
  //设置布局--网格包布局
GridBagLayout gr = new GridBagLayout();
app.setLayout(gr);
     //设置  网格包约束
GridBagConstraints gc = new GridBagConstraints();

     //第一个
 //每一个文本框创建,显示JTextArea一个实例,再放入JScrollPane,再放入JPanel。最后是把JPanel
 //放到JFrame里头。
JTextArea jText1 = new JTextArea();
JScrollPane roll1 = new JScrollPane(jText1);
jText1.append("you're talking to: null");
JPanel jp1 = new JPanel();
jp1.setLayout(new BorderLayout());
jp1.add(roll1, BorderLayout.CENTER);

//约束
gc.gridx = 0;
gc.gridy = 0;
gc.gridheight = 10;
gc.gridwidth = GridBagConstraints.REMAINDER;
gc.fill = GridBagConstraints.BOTH;
gr.setConstraints(jp1, gc);

    //第二个
JTextArea jText2 = new JTextArea();
JScrollPane roll2 = new JScrollPane(jText2);
jText2.append("you");
JPanel jp2 = new JPanel();
jp2.setLayout(new BorderLayout());
jp2.add(roll2, BorderLayout.CENTER);
    //约束
gc.gridx = 0;
gc.gridy = 11;
gc.gridwidth = GridBagConstraints.REMAINDER;
gc.gridheight = 20;
gc.fill = GridBagConstraints.BOTH;
gr.setConstraints(jp2, gc);

   //第三个
JTextArea jText3 = new JTextArea();
JScrollPane roll3 = new JScrollPane(jText3);
jText3.append("you");
JPanel jp3 = new JPanel();
jp3.setLayout(new BorderLayout());
jp3.add(roll3, BorderLayout.CENTER);
   //约束
gc.gridx = 0;
gc.gridy = 31;
gc.gridwidth = GridBagConstraints.RELATIVE;
gc.gridheight = 10;
gc.fill = GridBagConstraints.BOTH;
gr.setConstraints(jp3, gc);
   //第4个
JTextArea jText4 = new JTextArea();
JScrollPane roll4 = new JScrollPane(jText4);
jText3.append("you");
JPanel jp4 = new JPanel();
jp4.setLayout(new BorderLayout());
jp4.add(roll4, BorderLayout.CENTER);
   //约束
gc.gridx = 0;
gc.gridy = 41;
gc.gridwidth = GridBagConstraints.REMAINDER;
gc.gridheight = 10;
gc.fill = GridBagConstraints.BOTH;
gr.setConstraints(jp4, gc);


//添加组件
app.add(jp1);
app.add(jp2);
app.add(jp3);
app.add(jp4);



//显示
//app.pack();
app.setVisible(true);
}
}

解决方案 »

  1.   

    GridBagLayout 太繁琐了。
    在 https://designgridlayout.dev.java.net下载 designgridlayout-1.5.jar
    import net.java.dev.designgridlayout.DesignGridLayout;JFrame frame = new JFrame("连通Chat");
    DesignGridLayout layout = new DesignGridLayout(frame.getContentPane());
    layout.row().left().fill().add(new JScrollPane(new JTextArea(),JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_NEVER));
    layout.row().left().fill().add(new JScrollPane(new JTextArea(),JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_NEVER));
    layout.row(2.0).left().fill().add(new JScrollPane(new JTextArea(),JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_NEVER));
    layout.row().left().fill().add(new JScrollPane(new JTextArea(),JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_NEVER));
    frame.setPreferredSize(new Dimension(400,600));
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.pack();
    frame.setVisible(true);
      

  2.   

    GridBagLayout其实没有这么烦
    你只要设几个参数就行了
    weighty表示y向的比例所以1,2,1,1就行了
    gridy表示第几个组件,而不是精确坐标,所以只要0,1,2,3就行了import java.awt.*;
    import javax.swing.*;public class ChatWnd {
    public static void main(String args[]) {
    CreateWnd ChatWindow = new CreateWnd(); }
    }// a class in order to just create a window
    class CreateWnd {
    public CreateWnd() {
    // 顶层容器制定
    JFrame app = new JFrame("连通Chat");
    // Container c = getContentPane();
    app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    app.setSize(640, 160);
    // 设置布局--网格包布局
    GridBagLayout gr = new GridBagLayout();
    app.setLayout(gr);
    // 设置 网格包约束
    GridBagConstraints gc = new GridBagConstraints(); // 第一个
    // 每一个文本框创建,显示JTextArea一个实例,再放入JScrollPane,再放入JPanel。最后是把JPanel
    // 放到JFrame里头。
    JTextArea jText1 = new JTextArea();
    JScrollPane roll1 = new JScrollPane(jText1);
    jText1.append("you're talking to: null");
    gc.gridx = 0;
    gc.gridy = 0;
    gc.weighty = 1;
    gc.fill = GridBagConstraints.BOTH;
    gr.setConstraints(roll1, gc);
    app.add(roll1); // 第二个
    JTextArea jText2 = new JTextArea();
    JScrollPane roll2 = new JScrollPane(jText2);
    jText2.append("you");
    gc.gridx = 0;
    gc.gridy = 1;
    gc.weighty = 2;
    gc.fill = GridBagConstraints.BOTH;
    gr.setConstraints(roll2, gc);
    app.add(roll2); // 第三个
    JTextArea jText3 = new JTextArea();
    JScrollPane roll3 = new JScrollPane(jText3);
    jText3.append("you");
    gc.gridx = 0;
    gc.gridy = 2;
    gc.weighty = 1;
    gr.setConstraints(roll3, gc);
    app.add(roll3);

    // 第四个
    JTextArea jText4 = new JTextArea();
    JScrollPane roll4 = new JScrollPane(jText4);
    jText3.append("you");
    gc.gridx = 0;
    gc.gridy = 3;
    gc.weighty = 1;
    gr.setConstraints(roll4, gc);
    app.add(roll4); app.setVisible(true);
    }
    }