Why is the gridbagconstraint not working

China☆狼群 提交于 2019-12-13 21:13:43

问题


I have used a grid bag constraint, when I use the insets to add the spacing that works fine however when I use the gridx and gridy to set the position nothing happens. I just posted the entire code below, I don't know if this would help, thanks

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();
        }
    });

}}

回答1:


It looks to me like you have some serious misunderstandings of the workings of GridBagLayout. In your current code, there is only one JComponent inside your GridBagLayout... and that is btNextThree.

Here is where you added it into the Grid.

panelButton.add(btNextThree, gbc);

"At the moment the button in panelButton is in the center but I just want to move it to the far right, what is the best way to do that?".

You can't do that with GridBagLayout... at least not the way you think. The cells in the Grid of GridBagLayout don't have a size until they have a component added to them, so where you have added btNextThree to;

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

It is now in the right-most cell in a grid of two columns and one row. However, the left-most column has no size, as it only has potential space inside it. Therefore, your right column with btNextThree inside takes up all available space.

So after all my babbling the short answer is that you should probably use another LayoutManager. But if you want a quick dirty fix you could create a second invisible component of roughly the same size as btNextThree and add it to the left most column, which would space them out evenly into two even columns. The below code should do that.

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

panelButton.add(jButtonThatsSetToInvisible, gbc2);

If you later want them to stay correctly aligned within their container when resizing you may have to play with the GridBagConstraints weight attributes, but that is for another post I think.



来源:https://stackoverflow.com/questions/18231995/why-is-the-gridbagconstraint-not-working

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!