Вопрос

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

У меня есть следующая программа, и у меня проблемы с одной вещью. Я создал макет сетки, и я использую 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);


 }
}
Это было полезно?

Решение

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

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

Другие советы

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

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

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

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

Имеет смысл?

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top