我如何使用GridBagConstraints setRows和setColumns?

时间:2014-11-21 14:44:57

标签: java swing layout-manager gridbaglayout

如何使用setRows和setColumns更改窗口中的行数和列数?

这是我的代码的副本,我试图实现设置的行和列:

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;

import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Toolkit;
import java.awt.*;
@SuppressWarnings("unused")

public class GUI
{

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


    public GUI()
    {

        JFrame AG = new JFrame("Adventure Game");
        AG.setExtendedState(JFrame.MAXIMIZED_BOTH);
        AG.setResizable(true);
        AG.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JPanel p=new JPanel();

        p.setLayout (new GridBagLayout());

        AG.add(p);
        GridBagConstraints GBC = new GridBagConstraints();
        GridLayout.setRows(100);//heres the set rows<<<<<<<<<<<<<<<<<<<
        GridLayout.setColumns(100);//heres the set columns<<<<<<<<<<<<<<<<<<<
        AG.getContentPane().add(p, BorderLayout.NORTH);


        JButton saveButton =new JButton("Save");
        JButton loadButton =new JButton("Load");
        JButton optionsButton = new JButton("Options");

        JLabel textBox= new JLabel("Story line will go here.");

        JLabel label11 = new JLabel("Test 1");
        GBC.gridx = 0;
        GBC.gridy = 1;

        p.add(label11,GBC);
        JLabel label12 = new JLabel("Test 2");
        GBC.gridx = 0;
        GBC.gridy = 2;
        p.add(label12,GBC);
        JLabel label13 = new JLabel("Test 3");
        GBC.gridx = 0;
        GBC.gridy = 3;
        p.add(label13,GBC);
        JLabel label14 = new JLabel("Test 4");
        GBC.gridx = 0;
        GBC.gridy = 5;
        p.add(label14,GBC);

        AG.setVisible(true);
    }
}

2 个答案:

答案 0 :(得分:2)

GridBagConstraints使用GridBagLayout,而不是GridLayout。您对GridLayout的调用没有做任何事情。

要使用GridBagConstraints设置行和列,您需要使用GBC.gridx = ...;GBC.gridy = ...;

答案 1 :(得分:0)

如果您尝试在按钮之间放置间隙,则无法使用空的GridBag单元格;使用你的GridBagConstraints的insets

要使GridBagLayout中的组件消失而其他组件没有移动,请将该按钮放在带有CardLayout的JPanel中,并确保将该JPanel添加到GridBagLayout而不是按钮:

private JButton optionalButton;

private void buildWindow() {
    // ...

    optionalButton = new JButton("Optional Action");

    JPanel optionalButtonPanel = new JPanel(new CardLayout());
    optionalButtonPanel.add(optionalButton, "BUTTON");
    optionalButtonPanel.add(new JLabel(), "BLANK");

    // ...
}

private void setOptionalButtonVisible(boolean visible) {
    Container optionalButtonPanel = optionalButton.getParent();
    CardLayout layout = (CardLayout) optionalButtonPanel.getLayout();
    layout.show(optionalButtonPanel, visible ? "BUTTON" : "BLANK");
}

CardLayout始终只显示其中一个组件,但它会调整其关联容器的大小以适应所有组件,包括不可见组件。