当前位置: 代码迷 >> J2SE >> 弄Swing厉害的进来帮帮忙,该如何解决
  详细解决方案

弄Swing厉害的进来帮帮忙,该如何解决

热度:24   发布时间:2016-04-24 01:10:57.0
弄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);            }        });            }}