java - 调整元素的大小和位置

标签 java swing user-interface layout-manager gridbaglayout

public class InputURL {

public InputURL() {
    input();
}

private static JFrame mainFrame = Launcher.returnFrame();
private static JPanel mainPanel;

private void input(){


//Defining a Panel on which everything will be set
mainPanel = new JPanel();
mainPanel.setLayout(new GridBagLayout());

//To put the GridBagLayout Constraints
GridBagConstraints c = new GridBagConstraints();

//Set Panel Size
mainPanel.setSize(Constants.windowWidth,Constants.windowHeight);

//Setting the Input Box
JTextField inputURL = new JTextField();
c.fill = GridBagConstraints.CENTER;
c.ipady = 50;
c.weightx = 0.0;
c.gridwidth = 3;
c.gridx = 0;
c.gridy = 1;
mainPanel.add(inputURL, c);

//Adding the start button
JButton submitURL = new JButton(Constants.SUBMIT_URL_BUTTON);
submitURL.addActionListener(new ActionListener() {

    //The action performed by the start button
    public void actionPerformed(ActionEvent e)
    {
        //Execute when button is pressed
        }
});      

//The placement of the button
c.fill = GridBagConstraints.VERTICAL;
c.ipady = 50;
c.weightx = 0.0;
c.gridwidth = 3;
c.gridx = 0;
c.gridy = 2;
mainPanel.add(submitURL, c);


//Adding the components on Panel to Frame
mainFrame.add(mainPanel);

}
}

可以在此处查看输出和预期输出。需要有关输出的帮助。例如:

enter image description here

我尝试过使用 GridBagConstraints,但由于某种原因,我无法对 UI 进行太多操作。

最佳答案

很多都取决于您的最终需求,例如,这只是利用了 GridBagConstraints 的一些基本属性

enter image description here

import java.awt.EventQueue;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class TestLayout {

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

    public TestLayout() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                    ex.printStackTrace();
                }

                JFrame frame = new JFrame("Testing");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.add(new TestPane());
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

    public class TestPane extends JPanel {

        private JTextField inputURL;
        private JButton submitURL ;

        public TestPane() {
            inputURL = new JTextField(20);
            submitURL = new JButton("Submit the URL");
            submitURL.setMargin(new Insets(10, 10, 10, 10));

            setLayout(new GridBagLayout());
            GridBagConstraints gbc = new GridBagConstraints();
            gbc.gridx = 0;
            gbc.gridy = 0;
            gbc.insets = new Insets(10, 10, 10, 10);
            add(new JLabel("Header"), gbc);

            gbc.gridy++;
            gbc.insets = new Insets(0, 10, 20, 10);
            add(inputURL, gbc);

            gbc.gridy++;
            gbc.insets = new Insets(0, 0, 0, 0);
            gbc.weighty = 1.0;
            add(submitURL, gbc);
        }

    }

}

更复杂的解决方案可能会利用复合布局,混合使用 BorderLayoutGridLayoutGridBagLayout

例如...

Layout

public class TestPane extends JPanel {

    private JTextField inputURL;
    private JButton submitURL ;

    public TestPane() {
        setLayout(new BorderLayout());
        JLabel header = new JLabel("Header");
        header.setHorizontalAlignment(JLabel.CENTER);
        header.setBorder(new EmptyBorder(10, 10, 10, 10));
        add(header, BorderLayout.NORTH);

        inputURL = new JTextField(20);
        submitURL = new JButton("Submit the URL");
        submitURL.setMargin(new Insets(10, 10, 10, 10));

        JPanel content = new JPanel(new GridLayout(2, 1));

        JPanel field = new JPanel(new GridBagLayout());
        field.add(inputURL);

        content.add(field);

        JPanel actions = new JPanel(new GridBagLayout());
        actions.add(submitURL);

        content.add(actions);

        add(content);
    }

}

虽然这听起来很愚蠢,但花更多时间关注用户的实际工作流程,这将引导您做出最佳布局决策,而不是关注物理布局本身

关于java - 调整元素的大小和位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33598872/

相关文章:

javascript - Quintus JavaScript 编程 GUI

JavaFX ...是什么让我的 Controller 变慢?

java - 尝试设置自定义 BaseAdapter 时出现错误

java - 在 Axis2 中使用非合并解析器

java - 如何在 actionPerformed() 中更新 JFrame?

JDBC 的 Java 线程

Java - 如何使用 OverlayLayout LayoutManager 将 Canvas 放在彼此之上?

c++ - 更改对话框的背景颜色mfc

java - 没有代码生成的 Jooq insert 语句

java - 由于 AsyncTask onPostExecute(),ArrayAdapter<String> 中出现 Android NullPointerException