扩大时的桂问题

时间:2014-08-21 15:45:31

标签: java swing layout-manager

我的GUI上有一个问题。在我运行我的代码之后。我的GUI将显示如下图所示

not enlarged

但是当我把它放大到全屏时。它会变成这样的。 enlarged

如果只放大到全屏,我如何保持在中心,就像图片中的尺寸一样?

import java.awt.BorderLayout;
import java.awt.GridLayout;    
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;

public class GuiTest {    
    JFrame frame = new JFrame("Gui Test");
    JPanel panel = new JPanel(new GridLayout(4,0));
    JPanel panelTwo = new JPanel(new BorderLayout());
    JLabel labelOne = new JLabel("Text One:");
    JLabel labelTwo = new JLabel("Text Two:");
    JTextField textFieldOne = new JTextField(15);  
    JTextField textFieldTwo = new JTextField(15);
    JTextField textFieldThree = new JTextField(15);

    public GuiTest() {
        panel.add(labelOne);
        panel.add(textFieldOne);
        panel.add(labelTwo);
        panel.add(textFieldTwo);
        panelTwo.add(panel, BorderLayout.CENTER);
        frame.add(panelTwo);
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        frame.pack();
        frame.getPreferredSize(); 
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
        //frame.setResizable(false);
    }

    public static void main(String[]args) { 
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new GuiTest();
            }
        });
    }

}   

1 个答案:

答案 0 :(得分:2)

另一个GridLayout混乱!

它正在伸展它的孩子,我们无能为力。 GridLayout是一个非常简单的经理,实际上非常有限 用法。跳过它并跳过BorderLayout。唯一的事情 您需要了解BorderLayout它是默认管理器 框架的内容窗格。

布局管理是一件复杂的事情 - 没有捷径。一个必须 付出一些努力来学习它。好消息是有一些非常有能力 布局经理。我推荐以下两个:

  • MigLayout
  • 的GroupLayout

的JGoodies' FormLayout也是一个不错的选择。这些经理正在做 它恰当。仔细研究它们并选择你喜欢的。

我提供了两个解决方案,一个包含MigLayout,另一个包含GroupLayout

MigLayout解决方案

MigLayout是我们需要下载的第三方布局管理器 一个jar文件。

package com.zetcode;

import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import net.miginfocom.swing.MigLayout;

public class MigLayoutEx extends JFrame {

    public MigLayoutEx() {

        initUI();
    }

    private void initUI() {

        JPanel pnl = new JPanel(new MigLayout("ins dialog, center, "
                + "center, wrap"));

        pnl.add(new JLabel("Text one"));
        pnl.add(new JTextField(15));
        pnl.add(new JLabel("Text two"));
        pnl.add(new JTextField(15));

        add(pnl);

        pack();

        setTitle("MigLayout example");
        setLocationRelativeTo(null);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }    


    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                MigLayoutEx ex = new MigLayoutEx();
                ex.setVisible(true);
            }
        });       
    }
}

MigLayout solution

GroupLayout解决方案

GroupLayout是一个内置的布局管理器。

package com.zetcode;

import java.awt.Container;
import java.awt.EventQueue;
import javax.swing.GroupLayout;
import static javax.swing.GroupLayout.Alignment.LEADING;
import static javax.swing.GroupLayout.DEFAULT_SIZE;
import static javax.swing.GroupLayout.PREFERRED_SIZE;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;

public class GroupLayoutEx extends JFrame {

    public GroupLayoutEx() {

        initUI();
    }

    private void initUI() {

        Container pane = getContentPane();
        GroupLayout gl = new GroupLayout(pane);
        pane.setLayout(gl);

        JLabel lbl1 = new JLabel("Text one");
        JLabel lbl2 = new JLabel("Text two");

        JTextField field1 = new JTextField(15);
        JTextField field2 = new JTextField(15);

        gl.setAutoCreateGaps(true);
        gl.setAutoCreateContainerGaps(true);

        gl.setHorizontalGroup(gl.createSequentialGroup()
                .addGap(5, 50, Short.MAX_VALUE)
                .addGroup(gl.createParallelGroup(LEADING)
                .addComponent(lbl1)
                .addComponent(field1, DEFAULT_SIZE, DEFAULT_SIZE, 
                        PREFERRED_SIZE)
                .addComponent(lbl2)
                .addComponent(field2, DEFAULT_SIZE, DEFAULT_SIZE, 
                        PREFERRED_SIZE))
                .addGap(5, 50, Short.MAX_VALUE)
        );

        gl.setVerticalGroup(gl.createSequentialGroup()
                .addGap(5, 50, Short.MAX_VALUE)
                .addGroup(gl.createSequentialGroup()
                        .addComponent(lbl1)
                        .addComponent(field1, DEFAULT_SIZE, DEFAULT_SIZE,
                                PREFERRED_SIZE)
                        .addComponent(lbl2)
                        .addComponent(field2, DEFAULT_SIZE, DEFAULT_SIZE,
                                PREFERRED_SIZE))
                .addGap(5, 50, Short.MAX_VALUE)
        );

        pack();

        setTitle("GroupLayout example");
        setLocationRelativeTo(null);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                GroupLayoutEx ex = new GroupLayoutEx();
                ex.setVisible(true);
            }
        });
    }
}