为什么不工作的gridbagconstraint(Why is the gridbagconstra

2019-10-29 11:47发布

我已经使用了网格包约束,当我使用插图添加但是当我使用的gridx和gridy设置没有任何反应的立场,即工作正常的间距。 我刚刚张贴整个代码下面,我不知道这是否会帮助,谢谢

import javax.swing.*;import java.awt.BorderLayout;import java.awt.CardLayout;importjava.awt.Color;import java.awt.GridBagConstraints;import java.awt.GridBagLayout;import java.awt.Insets;import java.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjavax.swing.ImageIcon import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JScrollPane;importjavax.swing.JTree;import javax.swing.tree.DefaultMutableTreeNode;import javax.swing.tree.DefaultTreeModel;public class MyWizard {
private JFrame frame = new JFrame("My Wizard");
private JPanel panelContainer = new JPanel();
private JPanel panelFirst = new JPanel();
private JPanel panelSecond = new JPanel();
private JPanel panelThird = new JPanel();

private JPanel panelButton = new JPanel(new GridBagLayout());

private JButton btNext = new JButton ("Next");
private JButton btNextTwo = new JButton ("Next");
private JButton btNextThree = new JButton("Next");
private JRadioButton btLdap, btKerbegos, btSpnego, btSaml2;
private JCheckBox btSan, btNFS, btYUMserver;
private CardLayout c1 = new CardLayout();
private JScrollPane scrollPane;
private JLabel lblPicture, lblPictureTwo;
DefaultMutableTreeNode root = new DefaultMutableTreeNode("FMW Components");


public MyWizard() {
    //tree code
    final DefaultMutableTreeNode accessibility =
            add(root, "DB Tier", true);
    add(accessibility, "RAC", false);
    add(accessibility, "Gateways", false);
    add(accessibility, "Datavault", false);
    add(accessibility, "Agent", false);
    add(accessibility, "Custom Databases", false);
    root.add(accessibility);

    final DefaultMutableTreeNode browsing =
            new DefaultMutableTreeNode("APP Tier");
    add(browsing, "IDM (OID, OVD)", false);
    add(browsing, "IAM (Access Manager)", false);
    add(browsing, "BIEE", false);
    add(browsing, "Forms and Reports", false);
    add(browsing, "Discoverer", false);
    add(browsing, "Apps", false);
    add(browsing, "Apex(4.2.1)", false);
    root.add(browsing);

    final DefaultTreeModel treeModel = new DefaultTreeModel(root);
    final JTree tree = new JTree(treeModel);

    final CheckBoxNodeRenderer renderer = new CheckBoxNodeRenderer();
    tree.setCellRenderer(renderer);

    final CheckBoxNodeEditor editor = new CheckBoxNodeEditor(tree);
    tree.setCellEditor(editor);
    tree.setEditable(true);
    scrollPane = new JScrollPane(tree);
    //tree code ends

    panelFirst.setLayout(null); 
    panelSecond.setLayout(null); 
    panelThird.setLayout(new BorderLayout());


    panelContainer.setLayout(c1);
    panelFirst.add(btNext);
    panelSecond.add(btNextTwo);


    GridBagConstraints gbc = new GridBagConstraints();
    gbc.insets = new Insets(5,5,5,5);

    //this is not working
    gbc.gridx = 1;
    gbc.gridy = 0;

    panelButton.add(btNextThree, gbc);
    panelThird.add(scrollPane, BorderLayout.CENTER);
    panelThird.add(panelButton,  BorderLayout.SOUTH);

    panelFirst.setBackground(Color.white);
    panelSecond.setBackground(Color.white);

    panelContainer.add(panelFirst, "1");
    panelContainer.add(panelSecond,"2");
    panelContainer.add(panelThird,"3");
    c1.show(panelContainer, "1");


    btNext.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent arg0) {
            c1.show(panelContainer,"2");

        }

    });

    btNextTwo.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent arg0) {
            c1.show(panelContainer,"3");

        }

    });
    RadioButtons();
    Button();
    Buttons();
    CheckList();
    groupButton();
    Image();
    frame.add(panelContainer);
    frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    frame.pack();
    frame.setSize(400,310);
    frame.setVisible(true); 
}


public void RadioButtons() {
    btLdap = new JRadioButton ("Ldap");
    btLdap.setBounds(60,85,100,20);
    btLdap.setBackground(Color.white);
    panelFirst.add(btLdap);

    btKerbegos = new JRadioButton ("Kerbegos");
    btKerbegos.setBounds(60,115,100,20);
    btKerbegos.setBackground(Color.white);
    panelFirst.add(btKerbegos);

    btSpnego =new JRadioButton("Spnego");
    btSpnego.setBounds(60,145,100,20);
    btSpnego.setBackground(Color.white);
    panelFirst.add(btSpnego);

    btSaml2 = new JRadioButton("Saml2");
    btSaml2.setBounds(60,175,100,20);
    btSaml2.setBackground(Color.white);
    panelFirst.add(btSaml2);
}

public void Button() {
    btNext.setBounds(250,240,100,20);
}

public void CheckList () {
    btSan = new JCheckBox ("San");
    btSan.setBounds(60,85,100,20);
    btSan.setBackground(Color.white);
    panelSecond.add(btSan);

    btNFS = new JCheckBox ("NFS");
    btNFS.setBounds(60,115,100,20);
    btNFS.setBackground(Color.white);
    panelSecond.add(btNFS);

    btYUMserver =new JCheckBox("Spnego");
    btYUMserver.setBounds(60,145,100,20);
    btYUMserver.setBackground(Color.white);
    panelSecond.add(btYUMserver);
}

public void Buttons() {
    btNextTwo.setBounds(250,240,100,20);
}



public void Image() {
    ImageIcon image = new ImageIcon("iconpic.png");
    lblPicture = new JLabel(image);
    lblPicture.setBounds(140,5, 330, 270);
    panelFirst.add(lblPicture);

    ImageIcon imageTwo = new ImageIcon("iconpic.png");
    lblPictureTwo = new JLabel(imageTwo);
    lblPictureTwo.setBounds(140,5, 330, 270);
    panelSecond.add(lblPictureTwo);
}

private void groupButton() {

    ButtonGroup bg1 = new ButtonGroup( );

    bg1.add(btLdap);
    bg1.add(btKerbegos);
    bg1.add(btSpnego);
    bg1.add(btSaml2);

}

private static DefaultMutableTreeNode add(
        final DefaultMutableTreeNode parent, final String text,
        final boolean checked)
{
    final CheckBoxNode data = new CheckBoxNode (text, checked);
    final DefaultMutableTreeNode node = new DefaultMutableTreeNode(data);
    parent.add(node);
    return node;
}

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

}}

Answer 1:

它看起来像你对我有运作的一些严重的误解GridBagLayout 。 在当前的代码中,只有一个JComponent你里面GridBagLayout ...这是btNextThree

在这里你添加入电网。

panelButton.add(btNextThree, gbc);

“目前在panelButton按钮处于中心,但我只是想将其移动到最右边,什么是做到这一点的最好方法是什么?”。

你不能做到这一点与GridBagLayout的......至少不是你的思考方式。 在GridBagLayout中的网格中的细胞不具有大小,直到他们加入到他们的组成部分,所以,你必须添加btNextThree到;

gbc.gridx = 1;
gbc.gridy = 0;

现在是在两列和一行的网格最右侧的单元格。 然而,最左边的列没有大小,因为它仅在其内部具有潜在空间。 因此,你的右列btNextThree内占据全部可用空间。

所以我所有的咿呀学语后,简短的答案是,你应该使用其他LayoutManager 。 但是,如果你想快速修复脏,你可以创建大致相同尺寸的第二不可见组件btNextThree并将其添加到最左边的列,这将空间均匀出来为两个偶数列。 下面的代码应该这样做。

GridBagConstraints gbc2 = new GridBagConstraints();
gbc2.insets = new Insets(5,5,5,5);
gbc2.gridx = 0;
gbc2.gridy = 0;

panelButton.add(jButtonThatsSetToInvisible, gbc2);

调整你可能与玩的时候他们的容器内如果以后要他们留下来正确对齐GridBagConstraints权重属性,但这是另一篇文章,我认为。



文章来源: Why is the gridbagconstraint not working