日期:2014-05-20  浏览次数:20750 次

弄Swing厉害的进来帮帮忙
出来的效果不好,我要的是,一行一个组件,最后2行,是每行2个JLabel
纠结一天了

只要出界面,不要求事件处理,帮帮忙改改代码啊

Java code
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();
    }

}



------解决方案--------------------
Java code

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();
    }

}

------解决方案--------------------
使用一个第三方布局管理器,如 DesignGridLayout。

Java code
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);
            }
        });        
    }
}