JPanel отключается, FlowLayout работает не так, как задумано - PullRequest
0 голосов
/ 02 мая 2009

На днях этот код работал. Я изменил некоторые вещи и перезапустил его, и теперь он не работает, как задумано. Очевидно, что то, что я изменил, изменило поведение, но я вернулся и отменил все эти изменения, и это все еще не работает. Не обращая внимания на этот бит информации (для начала), почему этот код не размещает сетку JLabels 15x15 внутри JPanel?

gameBoard.setLayout(new FlowLayout());

for (int i = 0; i < 15; i++)
{
    for (int j = 0; j < 15; j++)
    {
        JLabel tile = new JLabel("");                       
     tile.setHorizontalAlignment(SwingConstants.CENTER);
        tile.setPreferredSize(new Dimension(27, 27));
        tile.setBorder(new EtchedBorder());
        tile.setEnabled(false);

        gameBoard.add(tile);
    }
}

gameBoard - это JPanel, определенный через GUI Builder NetBeans. Он имеет предпочтительный размер, максимальный размер (такой же, как предпочтительный). Параметры горизонтального / вертикального изменения размера отключены, однако, когда этот код запускается, каждая кнопка расширяется по горизонтали, не прерываясь.

Если я правильно понимаю, FlowLayout должен обернуть элементы, когда они достигнут конца содержащего их элемента. Это происходило до сегодняшнего дня, я действительно не знаю, почему это поведение прекратилось?

Ответы [ 4 ]

5 голосов
/ 02 мая 2009

Было бы намного лучше использовать GridLayout .

GridLayout gridLayout = new GridLayout(15, 15);

Возможно, макет потока изменился из-за использования нового внешнего вида, различных шрифтов или некоторого обновления Java VM. Определение схемы потока для этого использования не рекомендуется, поскольку вы зависите от базовых размеров, которые могут варьироваться в зависимости от виртуальных машин или внешнего вида.

3 голосов
/ 02 мая 2009

В интересах научить человека ловить рыбу:

Ревизионные системы управления великолепны. Даже ваша система регулярно выполняет резервное копирование вашего источника.

Полезная техника отладки - убирать вещи, пока они не заработают. Делает ли установка границы ваш код ломаться. Идя другим путем, вы можете написать тривиальную программу, которая демонстрирует проблему.

0 голосов
/ 02 мая 2009

Я понял это. Видимо, мне пришлось установить предпочитаемый размер в самом коде. Просто установить его в окне свойств Netbeans недостаточно. Странно.

0 голосов
/ 02 мая 2009

Я нашел большой успех и контроль, используя TableLayout , и я бы порекомендовал его всем. Вы можете определить столбцы и строки, используя определенное количество пикселей, или вы можете просто использовать TableLayout.PREFERRED для каждого столбца и / или строки. Очень красивый и гибкий макет. Мы используем его везде.

...