Макет сетки Java и JPanel - PullRequest
       28

Макет сетки Java и JPanel

1 голос
/ 30 ноября 2011

У меня есть вопрос.

У меня есть следующая программа, и у меня проблемы с одной вещью.Я создал макет сетки, и я использую JPanel для ввода кнопок и текста в сетке, но кажется, что все изменит размер, если мой текст очень длинный.Может кто-нибудь помочь мне с тем, как я могу предотвратить это?

Это мой код:

package JFrameTester;

import java.awt.*;
import javax.swing.*;



public class JFrameTester {


public JPanel createContentPane (){

        JPanel panel = new JPanel();
        JButton button1,button2,button3,button4;

        JPanel mainPanel = new JPanel(new GridLayout(2, 0, 40, 10));

        //JPanel red = createSquareJPanel(Color.red, 50);
        button1 =  new JButton ("button1");
        button2 =  new JButton ("button2");
        button3 =  new JButton ("button3");
        button4 =  new JButton ("button4");
        Label one   = new Label("Rohihtjthjhtjghjghmgfjgjghjghj");
        //add(button1);


        mainPanel.add(button1);
        mainPanel.add(one);
        mainPanel.add(button2);
        mainPanel.add(button3);
        mainPanel.add(button4);


        panel.add(mainPanel);
        panel.setOpaque(true);
        return panel;
    }


    public static void main(String[] args) {

        JFrame frame = new JFrame("GridLayout");
        JFrameTester Display = new JFrameTester();
        frame.setContentPane(Display.createContentPane());
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setVisible(true);


 }
}

Ответы [ 3 ]

4 голосов
/ 30 ноября 2011

Это то, что делают менеджеры по макету;они выделяют достаточно места для каждого компонента.Вы можете попробовать встроить HTML в экземпляр JLabel для его переноса.В противном случае вам просто придется с этим смириться.

Также важно отметить, что экземпляр JPanel по умолчанию непрозрачен.

1 голос
/ 30 ноября 2011

Ну ... обо всем по порядку.Вы объявляете GridLayout из 2 строк, 0 столбцов.Это именно то, что вы хотите?Я думаю, что нет.

Следующая часть, где вы добавляете контент.Сетка обычно имеет динамический размер.Это сократит ячейки до минимально возможного значения, которое они могут.Но когда некоторое содержимое становится больше (большой jPanels текста), оно расширяет ячейку.

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

Если я правильно читаю ваш вопрос, вам нужно установить статический размер для ваших JButtons, используя функции для JComponents См. Ссылку JavaDoc здесь .Возможно, вы захотите использовать setMaximumSize(new Dimension(width,height)); для каждой кнопки.

Имеет смысл?

На заметку.Если вы хотите больше контроля над макетом, используйте GrabBagLayout.Больше работы, но больше контроля.

0 голосов
/ 18 января 2014

Это старый пост, но я наткнулся на это, ища ту же проблему. Использование frame.pack () используется для перемещения всего вокруг в соответствии с заданным размером панели. Поэтому, если вы увеличиваете размер одной вещи, другие вещи сжимаются и перемещаются, чтобы поместиться в панель.

источник: http://www.macs.hw.ac.uk/guidebook/?name=JFrame&page=2

...