Размер содержимого окна Java изменяется, но не превышает минимального размера

У меня есть приложения Java, которые я написал с помощью NetBeans (да, я читал здесь множество жалоб на NetBeans). Когда я изменяю размер окна, содержимое изменяется вместе с окном, пока я не уменьшу окно (фактически, по высоте) ниже определенного размера. Затем размер окна изменяется, но его содержимое просто обрезается.

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

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

Спасибо.


person Timothy Miller    schedule 14.09.2011    source источник
comment
Предоставьте sscce, в котором описывается описанная вами проблема.   -  person trashgod    schedule 15.09.2011
comment
Я читал здесь множество жалоб на NetBeans. У меня нет проблем с людьми, использующими любую среду IDE с любым плагином, который им нужен. Но я возражаю против расплывчатых описаний кода или необходимости смотреть на раздутую чушь, которую обычно выпускают разработчики графического интерфейса. Кроме того, если возникает вопрос о том, как сделать мою IDE ..?, Я не могу ответить на этот вопрос. Есть дела поважнее, чем поддержка IDE. Даже спрашивающий, которому нужно упомянуть, что такое IDE, добавляет определенное подозрение, что они понятия не имеют, что делают.   -  person Andrew Thompson    schedule 15.09.2011
comment
это все в LayoutManager ... они могут свободно изменять свой размер, но для которых они предназначены. Выберите менеджера, который ведет себя так, как вы этого хотите.   -  person kleopatra    schedule 15.09.2011
comment
Публикация нескольких снимков поможет продемонстрировать вашу проблему (и мы могли бы увидеть, какие компоненты находятся в вашем макете). Конечно, наличие фрагмента кода тоже очень поможет!   -  person jfpoilpret    schedule 15.09.2011


Ответы (2)


да, и очень простое решение, просто переопределите и верните getMinimumSize()

Например

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class CustomComponent extends JFrame {

    private static final long serialVersionUID = 1L;

    public CustomComponent() {
        setTitle("Custom Component Test");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    public void display() {
        add(new CustomComponents(), BorderLayout.NORTH);
        add(new CustomComponents(), BorderLayout.CENTER);
        add(new CustomComponents(), BorderLayout.SOUTH);
        add(new CustomComponents(), BorderLayout.EAST);
        pack();
        // enforces the minimum size of both frame and component
        setMinimumSize(getMinimumSize());
        setPreferredSize(getPreferredSize());
        setVisible(true);
    }

    public static void main(String[] args) {
        CustomComponent main = new CustomComponent();
        main.display();
    }
}

class CustomComponents extends JLabel {

    private static final long serialVersionUID = 1L;

    @Override
    public Dimension getMinimumSize() {
        return new Dimension(200, 100);
    }

    @Override
    public Dimension getPreferredSize() {
        return new Dimension(300, 200);
    }

    @Override
    public void paintComponent(Graphics g) {
        int margin = 10;
        Dimension dim = getSize();
        super.paintComponent(g);
        g.setColor(Color.red);
        g.fillRect(margin, margin, dim.width - margin * 2, dim.height - margin * 2);
    }
}
person mKorbel    schedule 14.09.2011
comment
Как это поможет? Когда я исследую необработанный исходный код, который NetBeans генерирует для построения диалогового окна, я обнаружил, что только несколько элементов имеют минимальный размер, установленный на что-либо, и они маленькие (85x16). Кроме того, вы говорите, что я должен создать подкласс каждой панели, чтобы переопределить getMinimumSize ()? Я думаю, это будет необходимо только в том случае, если setMinimumSize не работает. Это сломано? Спасибо. - person Timothy Miller; 15.09.2011
comment
поскольку я пользователь NetBeans, я никогда не использовал встроенное приложение Java Desktop Aplication, убедитесь, что должны существовать параметры для генерации кода или ввода настраиваемых методов (ов), но вопрос в том, разрешены ли или поддерживаются, у вас есть преимущество, которое вы создаете GUI раз в час, но мое преимущество - полный контроль над JComponents, вот все download.oracle.com/javase/tutorial/uiswing/components/, но требовалось удобное кодирование :-) - person mKorbel; 15.09.2011
comment
+1 за демонстрацию того, как переопределить размеры в пользовательском компоненте. Я не понимаю причину вызова setMinimumSize() и setPreferredSize() в display(). - person trashgod; 15.09.2011

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

person ghostbust555    schedule 14.09.2011