簡體   English   中英

GridBagLayout不使用錨點

[英]GridBagLayout not using anchor

在這里,我試圖將組件(按鈕)錨定在面板的側面,但顯然我的GridBagConstraints缺少了一些東西。 我希望他們可以填充一下; 任何想法,我將如何做這樣的事情 在此處輸入圖片說明 我可以使用Insets進行填充嗎? 為任何幫助加油。

import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.io.IOException;

import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JLabel;

@SuppressWarnings("serial")
public class PlayGamePanel extends JComponent{

    @SuppressWarnings("unused")
    JComponent GamePanel2() throws IOException {

        JComponent GamePanel = new JLabel();

        //Setting up the gridbaglayout
        GamePanel.setLayout(new GridBagLayout());
        GridBagConstraints gbLayout = new GridBagConstraints();

        /*//Creating a button to test out switching panels
         * 
        JButton testButton = new JButton ("test");
        GamePanel.add(testButton);*/

        //Creating buttons for answering the quiz

        gbLayout.gridx = 0;
        gbLayout.gridy = 0;
        gbLayout.weightx = 1.0;
        gbLayout.anchor = GridBagConstraints.NORTHWEST;
        gbLayout.insets = new Insets(20, 20, 20, 20);

        JButton AnswerOneButton = new JButton("Answer One");
        GamePanel.add(AnswerOneButton);
        GamePanel.add(AnswerOneButton, gbLayout);

        gbLayout.gridx = 0;
        gbLayout.gridy = 0;
        gbLayout.weightx = 1.0;
        gbLayout.anchor = GridBagConstraints.NORTHEAST;
        gbLayout.insets = new Insets(20, 20, 20, 20);

        JButton AnswerTwoButton = new JButton("Answer Two");
        GamePanel.add(AnswerTwoButton);
        GamePanel.add(AnswerTwoButton, gbLayout);

        gbLayout.gridx = 0;
        gbLayout.gridy = 0;
        gbLayout.weightx = 1.0;
        gbLayout.anchor = GridBagConstraints.SOUTHEAST;
        gbLayout.insets = new Insets(20, 20, 20, 20);

        JButton AnswerThreeButton = new JButton("Answer Three");
        GamePanel.add(AnswerThreeButton);
        GamePanel.add(AnswerThreeButton, gbLayout);


        gbLayout.gridx = 0;
        gbLayout.gridy = 0;
        gbLayout.weightx = 1.0;
        gbLayout.anchor = GridBagConstraints.SOUTHWEST;
        gbLayout.insets = new Insets(20, 20, 20, 20);


        JButton AnswerFourButton = new JButton("Answer Four");
        GamePanel.add(AnswerFourButton);
        GamePanel.add(AnswerFourButton, gbLayout);

        return GamePanel;
    }
}

添加組件時,需要將GridBagConstraints傳遞給容器。

例如...

GamePanel.add(AnswerOneButton, gbLayout);

您還需要提供每個組件的單元格位置,例如...

gbLayout.gridx = 0;
gbLayout.gridy = 0;
JButton AnswerOneButton = new JButton("Answer One");
GamePanel.add(AnswerOneButton, gbLayout);

AnswerOneButton按鈕放在第一行的第一列中。

您可以使用insets屬性為每個單元格提供填充,例如...

gbLayout.weightx = 1.0;
gbLayout.gridx = 0;
gbLayout.gridy = 0;
gbLayout.insets = new Insets(20, 20, 20, 20);
JButton AnswerOneButton = new JButton("Answer One");
GamePanel.add(AnswerOneButton, gbLayout);

現在,就我個人而言,我將使用NORTHEASTNORTHWESTSOUTHEASTSOUTHWEST作為錨點,對我來說更有意義...

gbLayout.weightx = 1.0;
gbLayout.gridx = 0;
gbLayout.gridy = 0;
gbLayout.insets = new Insets(20, 20, 20, 20);
gbLayout.anchor = GridBagConstraints.NORTHWEST;
JButton AnswerOneButton = new JButton("Answer One");
GamePanel.add(AnswerOneButton, gbLayout);

更新所有按鈕的所有約束后,我得到類似...

在此處輸入圖片說明

您可能想看看如何使用GridBagLayout了解更多詳細信息...

您可能還希望通讀Java編程語言的代碼約定 ,這將使人們更容易閱讀您的代碼;)

使用JLabel作為主容器也是一個很有趣的選擇,您可能會發現JPanel提供了更好的支持

更新了示例代碼

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;
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) {
                }

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

    @SuppressWarnings("unused")
    JComponent GamePanel2() {

        JComponent GamePanel = new JPanel();
        GamePanel.setOpaque(false);

        //Setting up the gridbaglayout
        GamePanel.setLayout(new GridBagLayout());
        GridBagConstraints gbLayout = new GridBagConstraints();

        /*//Creating a button to test out switching panels
         * 
         JButton testButton = new JButton ("test");
         GamePanel.add(testButton);*/
        //Creating buttons for answering the quiz
        gbLayout.gridx = 0;
        gbLayout.gridy = 0;
        gbLayout.weightx = 1.0;
        gbLayout.anchor = GridBagConstraints.NORTHWEST;
        gbLayout.insets = new Insets(20, 20, 20, 20);
        JButton AnswerOneButton = new JButton("Answer One");
        GamePanel.add(AnswerOneButton, gbLayout);

        gbLayout.gridx = 1;
        gbLayout.anchor = GridBagConstraints.NORTHEAST;
        JButton AnswerTwoButton = new JButton("Answer Two");
        GamePanel.add(AnswerTwoButton, gbLayout);

        gbLayout.gridx = 0;
        gbLayout.gridy = 1;
        gbLayout.anchor = GridBagConstraints.SOUTHWEST;
        JButton AnswerThreeButton = new JButton("Answer Three");
        GamePanel.add(AnswerThreeButton, gbLayout);

        gbLayout.gridx = 1;
        gbLayout.gridy = 1;
        gbLayout.weightx = 1.0;
        gbLayout.anchor = GridBagConstraints.SOUTHEAST;
        JButton AnswerFourButton = new JButton("Answer Four");
        GamePanel.add(AnswerFourButton);
        GamePanel.add(AnswerFourButton, gbLayout);

        return GamePanel;
    }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM