package download;
import javax.swing.*;
import java.awt.*;
import java.net.*;
import java.io.*;
/*
 * 这是我想做的练习的代码,现在只是一个界面,但是总做不出我想要的样子.
 * 在我电脑上输入URL的urlField为什么几乎看不见?我想让它占到一行的3/4,
 * 同样显示信息的infoArea也很小,我想让它占到行和列的3/4,即整个面积的大部分,在右下脚.
 *请问我的程序问题在哪里,是不是weightx,weighty设置的不对?还有什么不合理之处敬请指教.
 */
public class Download extends JFrame{
public Download(){
super("单线程下载");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLocation(200,200);
this.setSize(300,300);
JLabel urlLabel = new JLabel("URL:");
JTextField urlField = new JTextField(30);
JLabel infoLabel = new JLabel("下载信息:");
JTextArea infoArea = new JTextArea(100,100);
JButton sure = new JButton("下载");

JPanel pane = new JPanel();
GridBagLayout gbl = new GridBagLayout();
GridBagConstraints constraints = new GridBagConstraints(); 
pane.setLayout(gbl);

buildConstraints(constraints,0,0,1,1,0.25,0.25);
gbl.setConstraints(urlLabel, constraints);
pane.add(urlLabel);

buildConstraints(constraints,1,0,GridBagConstraints.REMAINDER,1,0.75,0.25);
gbl.setConstraints(urlField,constraints);
pane.add(urlField);

buildConstraints(constraints,0,1,1,1,0.25,0.25);
gbl.setConstraints(infoLabel, constraints);
pane.add(infoLabel);

buildConstraints(constraints,1,1,3,3,0.75,0.75);
JScrollPane sp = new JScrollPane(infoArea);
gbl.setConstraints(sp,constraints);
pane.add(sp);

buildConstraints(constraints,0,2,1,1,0.25,0.5);
gbl.setConstraints(sure, constraints);
pane.add(sure);

this.setContentPane(pane);
this.setVisible(true);
}

public void buildConstraints(GridBagConstraints g,int gx,int gy,int gw,int gh,double wx,double wy){
g.gridx = gx;
g.gridy = gy;
g.gridheight = gh;
g.gridwidth = gw;
g.weightx = wx;
g.weighty = wy;

public static void main(String[] args) {
new Download();
}}

解决方案 »

  1.   

    import javax.swing.*;
    import java.awt.*;
    import java.net.*;
    import java.io.*;/*
     *   这是我想做的练习的代码,现在只是一个界面,但是总做不出我想要的样子.
     *   在我电脑上输入URL的urlField为什么几乎看不见?我想让它占到一行的3/4,
     *   同样显示信息的infoArea也很小,我想让它占到行和列的3/4,即整个面积的大部分,在右下脚.
     *请问我的程序问题在哪里,是不是weightx,weighty设置的不对?还有什么不合理之处敬请指教.
     */
    public class Download extends JFrame {
    public Download() {
    super("单线程下载");
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    this.setLocation(200, 200);
    this.setSize(300, 300);
    JLabel urlLabel = new JLabel("URL:");
    JTextField urlField = new JTextField(30);
    JLabel infoLabel = new JLabel("下载信息:");
    JTextArea infoArea = new JTextArea(100, 100);
    JButton sure = new JButton("下载"); JPanel pane = new JPanel();
    GridBagLayout gbl = new GridBagLayout();
    GridBagConstraints constraints = new GridBagConstraints();
    pane.setLayout(gbl); buildConstraints(constraints, 0, 0, 1, 1, 0, 0, GridBagConstraints.HORIZONTAL);
    gbl.setConstraints(urlLabel, constraints);
    pane.add(urlLabel); buildConstraints(constraints, 1, 0, 3, 1, 1, 0, GridBagConstraints.BOTH);
    gbl.setConstraints(urlField, constraints);
    pane.add(urlField); buildConstraints(constraints, 0, 1, 1, 1, 0, 0, GridBagConstraints.HORIZONTAL);
    gbl.setConstraints(infoLabel, constraints);
    pane.add(infoLabel); buildConstraints(constraints, 1, 1, 3, 3, 1, 1, GridBagConstraints.BOTH);
    JScrollPane sp = new JScrollPane(infoArea);
    gbl.setConstraints(sp, constraints);
    pane.add(sp); buildConstraints(constraints, 0, 4, 1, 1, 0, 0, GridBagConstraints.BOTH);
    gbl.setConstraints(sure, constraints);
    pane.add(sure); this.setContentPane(pane);
    this.setVisible(true);
    } public void buildConstraints(GridBagConstraints g, int gx, int gy, int gridweight,
    int gridheight, double weightx, double weighty, int fill) {
    g.gridx = gx;
    g.gridy = gy;
    g.gridheight = gridheight;
    g.gridwidth = gridweight;
    g.weightx = weightx;
    g.weighty = weighty;
    g.fill = fill;
    } public static void main(String[] args) {
    new Download();
    }}给你改了改~~~
      

  2.   

     GridBagLayout多练就会了,其实GUI编程都是一样,对一个控件或函数不懂,可以多试几遍就OK了.
      

  3.   

    就是不太明白weightx,weighty的用法,还有,我已经设置了urlField占三行一列,infoArea占三行三列,为什么却显示不出来,非要设置fill属性后才能看见?
      

  4.   

    weightx和weighty表示控件在填充时的权重,也就是说当拖动改变面板大小时,面板会出现多余的空间,这两个参数就是指定控件在对多出来的空间填充时的比例。比如说同一行有两个控件,其weightx分别为1和2,则在进行面板拖动时,这两个控件就按1:2的比例来填充多余空间。晕,缩小也是一样滴~~。
    另这两个参数必需和fill配合使用才有效~~希望对你有点帮助吧!