Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Изменение размеров компонентов и перерисовка 
V
    Опции темы
acvilon
  Дата 23.5.2007, 00:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 108
Регистрация: 16.4.2007
Где: Spb

Репутация: нет
Всего: нет



Народ подскажите как грамотно изменять размеры компонентов в зависимости от изменения размеров фрейма. Почему в следующем примере перерисовка работает плохо? Как лучше переписать это?

Код


public class TestMain {
    public static void main(String[] args) {
        TestFrame frame = new TestFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
}
public class TestFrame extends JFrame {
    private JToolBar containerToolBar;
    private JScrollPane imageScrollPanel;

    public TestFrame() {
        setTitle("OutText");
        Toolkit toolkit = Toolkit.getDefaultToolkit();
        int frameMaxSizeX = (int) toolkit.getScreenSize().getWidth();
        int frameMaxSizeY = (int) toolkit.getScreenSize().getHeight();

        setBounds(frameMaxSizeX / 4, frameMaxSizeY / 4,
                frameMaxSizeX / 2, frameMaxSizeY / 2);

        SpringLayout layout = new SpringLayout();
        setLayout(layout);

        JToolBar toolBar = new JToolBar();
        toolBar.setLayout(null);
        toolBar.setMinimumSize(new Dimension(frameMaxSizeX, 35));
        toolBar.setPreferredSize(new Dimension(frameMaxSizeX, 35));
        toolBar.setMaximumSize(new Dimension(frameMaxSizeX, 35));
        add(toolBar);
        Spring strut = Spring.constant(0);
        layout.putConstraint(SpringLayout.WEST, toolBar, strut, SpringLayout.WEST, this);

        toolBar.setFloatable(false);

        containerToolBar = new JToolBar();
        containerToolBar.setLayout(null);
//        containerToolBar.setMinimumSize(new Dimension(200, getHeight() - 35));
        containerToolBar.setPreferredSize(new Dimension(200, getHeight() - 35));
//        containerToolBar.setMaximumSize(new Dimension(200, getHeight() - 35));
        add(containerToolBar);
        layout.putConstraint(SpringLayout.NORTH, containerToolBar, strut, SpringLayout.SOUTH, toolBar);
        layout.putConstraint(SpringLayout.WEST, containerToolBar, strut, SpringLayout.WEST, this);
        containerToolBar.setFloatable(false);
        containerToolBar.setBackground(Color.BLUE);


        JPanel imagePanel = new JPanel();
        imagePanel.setBackground(Color.GREEN);
        imagePanel.setLayout(null);
        imagePanel.setPreferredSize(new Dimension(500, 500));
        imagePanel.setMaximumSize(new Dimension(500, 500));
        imagePanel.setMinimumSize(new Dimension(500, 500));
        imageScrollPanel = new JScrollPane(imagePanel, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
        imageScrollPanel.setViewportBorder(BorderFactory.createEmptyBorder());
//        imageScrollPanel.setMinimumSize(new Dimension(getWidth() - 208, getHeight() - 69));
        imageScrollPanel.setPreferredSize(new Dimension(getWidth() - 208, getHeight() - 69));
//        imageScrollPanel.setMaximumSize(new Dimension(getWidth() - 208, getHeight() - 69));
        add(imageScrollPanel);

        Spring test = Spring.constant(getWidth() - 200, getWidth() - 200, getWidth() - 200);
        layout.putConstraint(SpringLayout.WEST, imageScrollPanel, test, SpringLayout.EAST, imageScrollPanel);
        layout.putConstraint(SpringLayout.NORTH, imageScrollPanel, strut, SpringLayout.SOUTH, toolBar);
        layout.putConstraint(SpringLayout.WEST, imageScrollPanel, strut, SpringLayout.EAST, containerToolBar);
        addComponentListener(new sizeListener());
    }

    class sizeListener extends ComponentAdapter {
        public void componentResized(ComponentEvent e) {
            super.componentResized(e);
//            containerToolBar.setMinimumSize(new Dimension(200, getHeight()));
            containerToolBar.setPreferredSize(new Dimension(200, getHeight()));
//            containerToolBar.setMaximumSize(new Dimension(200, getHeight()));
//            imageScrollPanel.setMinimumSize(new Dimension(getWidth() - 208, getHeight() - 69));
            imageScrollPanel.setPreferredSize(new Dimension(getWidth() - 208, getHeight() - 69));
//            imageScrollPanel.setMaximumSize(new Dimension(getWidth() - 208, getHeight() - 69));
        }
    }
}


PM MAIL ICQ   Вверх
fixxer
Дата 23.5.2007, 09:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 672
Регистрация: 14.9.2006
Где: Саратов, Россия

Репутация: 15
Всего: 27



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


--------------------
user posted image
PM MAIL ICQ   Вверх
acvilon
  Дата 23.5.2007, 10:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 108
Регистрация: 16.4.2007
Где: Spb

Репутация: нет
Всего: нет



Вот вид фрейма, который мне необходим, подскажите каким LayoutManager'ом лучше пользоваться???
И как устанавливать желаемые размеры в менеджере?
Хотелось бы чтобы нижняя панель прилипла к нижнему краю, а скроллы панели прокрутки прилипли соответствено к правому краю фрейма и к нижней панели.
user posted image

Это сообщение отредактировал(а) acvilon - 23.5.2007, 10:41
PM MAIL ICQ   Вверх
fixxer
Дата 23.5.2007, 11:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 672
Регистрация: 14.9.2006
Где: Саратов, Россия

Репутация: 15
Всего: 27



А зачем абсолютное позиционирование?

Ну панели инструментов и статус панель с координатами раскладываются в BorderLayout соответственно в NORTH, WEST, SOUTH. JScrollPane кладется в CENTER.

Это сообщение отредактировал(а) fixxer - 23.5.2007, 11:18


--------------------
user posted image
PM MAIL ICQ   Вверх
acvilon
  Дата 23.5.2007, 11:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 108
Регистрация: 16.4.2007
Где: Spb

Репутация: нет
Всего: нет



А как мне установить чтобы панель инструментов, которая слева занимала определенную ширину, к примеру указанную в пикселях, или сколько то процентов от ширины фрейма?
Тоже самое с панелью, которая снизу, и сверху(хотелось бы установить у них конкретную высоту).
А абсолютное позиционирование сделано, потому что во вложенную панель я загружаю рисунок и на ней я создаю множество JLabel'ов, которые можно будет таскать.
PM MAIL ICQ   Вверх
acvilon
Дата 23.5.2007, 12:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 108
Регистрация: 16.4.2007
Где: Spb

Репутация: нет
Всего: нет



Сейчас поразбирался... У меня практически все получилось... Чтобы устанавливать предпочитаемый размер надо ставить setPrefferedSize(new Dimension(a,b))?


Это сообщение отредактировал(а) acvilon - 24.5.2007, 00:52
PM MAIL ICQ   Вверх
filipp76
Дата 23.5.2007, 14:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 241
Регистрация: 4.4.2007
Где: Украина, Киев

Репутация: 1
Всего: 1



Цитата(acvilon @  23.5.2007,  12:22 Найти цитируемый пост)
setPrefferedSize(new Dimension(a,b))?

Устанавливается реальный размер компонента.
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   jk1
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема »


 




[ Время генерации скрипта: 0.0593 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.