出来的效果不好,我要的是,一行一个组件,最后2行,是每行2个JLabel
纠结一天了只要出界面,不要求事件处理,帮帮忙改改代码啊import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class GetIp extends JFrame {
public GetIp() {
super("获得IP地址");
JLabel jl1=new JLabel("请输入网址:"); // 固定在一行
JTextField jtf1=new JTextField(15);   // 固定在一行 JButton jb1=new JButton("获得IP地址");// 固定在一行
JLabel jl2=new JLabel("本机IP地址:");JLabel jl4=new JLabel("");// 固定在一行 JLabel jl3=new JLabel("外网IP地址:");JLabel jl5=new JLabel("");// 固定在一行                  
JPanel panel1 =new JPanel();
panel1.add(jl1);
panel1.add(jtf1);
panel1.add(jb1);
panel1.add(jl2);
panel1.add(jl3);
add(panel1);

setBounds(100,100,220,200);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
JFrame.setDefaultLookAndFeelDecorated(true);
new GetIp();
}}

解决方案 »

  1.   


    import javax.swing.Box;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.JTextField;public class GetIp extends JFrame {

    public GetIp() {
    super("获得IP地址");

    Box box1 = Box.createVerticalBox();
    JLabel jl1 = new JLabel("请输入网址:"); // 固定在一行
    box1.add(jl1);
    JTextField jtf1 = new JTextField(15); // 固定在一行
    box1.add(jtf1);
    JButton jb1 = new JButton("获得IP地址");// 固定在一行
    box1.add(jb1); Box box2 = Box.createHorizontalBox();
    JLabel jl2 = new JLabel("本机IP地址:");
    box2.add(jl2);
    JLabel jl4 = new JLabel("4534534");// 固定在一行
    box2.add(jl4); Box box3 = Box.createHorizontalBox();
    JLabel jl3 = new JLabel("外网IP地址:");
    JLabel jl5 = new JLabel("123545");// 固定在一行
    box3.add(jl3);
    box3.add(jl5);

    box1.add(box2);
    box1.add(box3); JPanel panel1 = new JPanel();
    // panel1.add(jl1);
    // panel1.add(jtf1);
    // panel1.add(jb1);
    panel1.add(box1);

    // panel1.add(jl2);
    // panel1.add(jl3);
    add(panel1); setBounds(100, 100, 220, 200);
    setVisible(true);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    } public static void main(String[] args) {
    JFrame.setDefaultLookAndFeelDecorated(true);
    new GetIp();
    }}
      

  2.   

    用列布局,先分成五行一列,然后最好一行又分成两列一行就OK了,
    或者直接使用null布局,调用setBounts(x,y,w,h);
    想怎么排就怎么排
      

  3.   

    推荐使用netbeans这个工具,java空间布局学的不行就用它,很不错。
      

  4.   

    使用一个第三方布局管理器,如 DesignGridLayout。import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;import net.java.dev.designgridlayout.DesignGridLayout;public class GetIp extends JPanel {
        public GetIp() {
            DesignGridLayout layout = new DesignGridLayout(this);        layout.row().left().add(new JLabel("请输入网址:"));
            
            layout.row().left().add(new JTextField(15));   // 固定在一行        layout.row().center().add(new JButton("获得IP地址"));// 固定在一行
            
            layout.row().grid(new JLabel("本机IP地址:")).add(new JLabel(""));
            layout.row().grid(new JLabel("外网IP地址:")).add(new JLabel(""));        
        }
        
        public static void main(String[] args) {
            //JFrame.setDefaultLookAndFeelDecorated(true);
            EventQueue.invokeLater(new Runnable(){
                @Override public void run(){
                    JFrame frame = new JFrame("获得IP地址");
                    frame.setContentPane(new GetIp());
                    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                    frame.pack();
                    frame.setVisible(true);
                }
            });        
        }
    }