Как использовать GridBagConstraints setRows и setColumns?

1

Как использовать 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);
    }
}
  • 1
    Что вы пытаетесь достичь? Вам нужно манипулировать строками / столбцами с помощью GridBagConstraints : gridx , gridy , gridwidth , gridheight
  • 0
    да, я пытаюсь понять, как расположить мои кнопки, потому что я хочу, например, иметь возможность иметь пустые ячейки, чтобы у меня была кнопка в 0,1 0,2 0,3, тогда пропустить один и 0,5
Показать ещё 1 комментарий
Теги:
swing
layout-manager
gridbaglayout

2 ответа

2
Лучший ответ

GridBagConstraints работают с GridBagLayout, а не с GridLayout. Ваш вызов GridLayout ничего не делает.

Чтобы установить строки и столбцы с помощью GridBagConstraints, вам необходимо использовать GBC.gridx =...; и GBC.gridy =...;

  • 0
    это то, что я использовал, но количество столбцов и строк зависит от количества объектов, поэтому я хочу заранее определить, сколько ячеек на осях X и Y
  • 0
    Вы не можете заранее определить количество строк / столбцов в GridBagLayout ... Это не имеет смысла! Либо у вас есть компонент в строке / столбце, либо у вас его нет, и если вы этого не сделаете, GridBagLayout не будет размещать его (т. Е. 0 height & width)
0

Если вы пытаетесь поместить промежутки между вашими кнопками, пустые ячейки GridBag не могут сделать это; используйте для этого insets GridBagConstraints.

Чтобы компонент в GridBagLayout исчезал без смещения других компонентов, поместите кнопку в JPanel с помощью CardLayout и убедитесь, что вы добавили этот 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 всегда отображает один и только один из его компонентов, но он сопоставляет свой контейнер, соответствующий всем компонентам, включая невидимые.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню