Создание монопольного совета с помощью GridBagLayout - PullRequest
4 голосов
/ 14 июня 2010

В свободное время я строил версию Monopoly на Java, и у меня возникли проблемы с пониманием макетов и т. Д. Для Swing.

Каждое из моих мест на доске - это, по сути, обычай JButton, и я пытался расположить их по краю рамки (как на самой монопольной доске). Кажется, я не могу найти полезного объяснения того, как работает система макетов, и поэтому у меня возникли проблемы.

Может ли кто-нибудь дать мне пример того, как они будут размещать кнопки по краю рамки? Должен ли я использовать другой макет?

Ответы [ 4 ]

3 голосов
/ 14 июня 2010

Похоже, что он лучше всего работает с BorderLayout.Я бы порекомендовал создать 4 JPanel с, которые будут содержать все JButton с.

Затем добавить JPanels к BorderLayout.North, South, East и West.

Мне кажется, что это, вероятно, самый простой способ расположения кнопок.

Здесь - отличное место для начала использования BorderLayout.

.

Я просто собрал некоторый код, который может помочь вам начать выкладывать это. Не скомпилировано.

int boardWidth;
int boardHeight;
int boardSquareHeight;
int boardSqusreWidth;
JPanel north = new JPanel();
JPanel south = new JPanel();
Dimension northSouthD = new Dimension(boardWidth, boardSquareHeight);
north.setPreferedSize(northSouthD);
south.setPreferedSize(northSouthD);
JPanel east = new JPanel();
JPanel west = new JPanel();
Dimension eastWestD = new Dimension(boardSquareHeight, boardHeight - 2 * boardSquaareWidth);
east.setPreferedSize(easWestD);
west.setPreferedSize(easWestD);
// add all of the buttons to the appropriate JPanel
parentPanel.setLayoutManager(new BorderLayout());
parentPanel.add(north, BorderLayour.NORTH);
...
1 голос
/ 16 июня 2010

Я знаю, что на этот вопрос уже дан ответ, но я чувствовал, что вы заслуживаете взгляда на то, как работает GridLayout.Прежде всего http://java.sun.com/docs/books/tutorial/uiswing/layout/gridbag.html и http://www.cs.ubc.ca/local/computing/software/jdk-1.5.0/docs/api/java/awt/GridBagConstraints.html помогают расшифровать длинные и загадочно выглядящие сигнатуры метода.

В этом примере монопольного совета есть три основных части.Существует настройка макета, добавление большой средней части в виде JPanels и добавление внешних квадратов в виде JPanels.

public class GridBagLayoutExample extends JFrame {

public static void main(String[] args) {
    new GridBagLayoutExample().setVisible(true);
}

public GridBagLayoutExample() {

    try {
        //Setup the Layout
        setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
        GridBagLayout thisLayout = new GridBagLayout();
        thisLayout.rowWeights = new double[] { 0.2, 0.1, 0.1, 0.1, 0.1,
                0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.2 };
        thisLayout.columnWeights = new double[] { 0.2, 0.1, 0.1, 0.1, 0.1,
                0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.2 };
        getContentPane().setLayout(thisLayout);

        //Default Grid values
        int gridX = 0;
        int gridY = 0;
        //Add Panels for Each of the four sides
        for (int j = 0; j < 4; j++) {
            for (int i = 0; i < 13; i++) {
                JPanel tempPanel = new JPanel();
                switch(j)
                {
                case 0://Top Spaces
                    gridX = i;
                    gridY = 0;
                    break;
                case 1://Left Spaces
                    gridX = 0;
                    gridY = i;
                    break;
                case 2://Right Spaces
                    gridX = 12;
                    gridY = i;
                    break;
                case 3://Bottom Spaces
                    gridX = i;
                    gridY = 12;
                    break;
                }
                getContentPane().add(tempPanel,
                        new GridBagConstraints(gridX,// XGridSpot
                                gridY,// YGridSpot
                                1,// XGridSpaces
                                1,// YGridSpaces
                                0.0, 0.0, GridBagConstraints.CENTER,
                                GridBagConstraints.BOTH,//Fill
                                new Insets(0, 0, 0, 0), 0, 0));
                tempPanel.setBorder(BorderFactory
                        .createLineBorder(Color.BLACK));

            }
        }

        {// Main Inner Area Notice Starts at (1,1) and takes up 11x11
            JPanel innerPanel = new JPanel();
            getContentPane().add(
                    innerPanel,
                    new GridBagConstraints(1,
                            1,
                            11,
                            11,
                            0.0, 0.0,
                            GridBagConstraints.CENTER,
                            GridBagConstraints.BOTH,
                            new Insets(0, 0, 0, 0), 0, 0));
        }
        pack();
        setSize(260, 260);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

}

Отсюда, если вы добавите структуру для удержания панелейа затем вы можете добавить кнопки и все, что вы хотите, к каждой из панелей.Кнопки также будут работать вместо панелей.Это должно скомпилировать с правильным импортом, поэтому скомпилируйте и попробуйте.

0 голосов
/ 14 июня 2010

Вы можете создать макет, похожий на NetBeans, а затем использовать автоматически сгенерированный код (он генерирует интервалы от созданного вами дизайна), чтобы выложить свою собственную доску, просто скопировав автоматически сгенерированный код и заменив его своими пользовательскими кнопками. а не какой-либо элемент, который вы использовали в качестве заполнителя.

Это позволило бы вам размещать вещи именно там, где вы хотите, на основе относительного расстояния, а не пытаться вычислить свинг.

0 голосов
/ 14 июня 2010

Стандартный GridLayout может сработать, если оставить «внутренние» ячейки пустыми.

...