Форум программистов, компьютерный форум, киберфорум
Java: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
0 / 0 / 0
Регистрация: 08.06.2012
Сообщений: 4

JPanel для рисования и JScrollPanel

18.06.2013, 17:35. Показов 2223. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Делаю графический редактор. Холст - JPanel на которой изображаются фигуры.
Размеры холста постоянно меняются в ходе выполнения программы.
Никак не могу поставить всё на JScrollPanel, чтобы можно было просматривать всё изображение.
При создании холста, он не отображается, хотя сама панель прокрутки есть.
Пожалуйста, посоветуйте что нибудь...
Зарастание спасибо.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
18.06.2013, 17:35
Ответы с готовыми решениями:

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

Добавление JPanel на JPanel, не отображаются те, которые добавлены сверху
Здравствуйте. У меня есть панель fon на которой у меня картинка с фоном и 15 панелей на которых нарисованы шарики,пытаюсь добавить панели с...

Как правильно задать размер JPanel чтобы JFrame при pack() сжимался до размеров JPanel
Подскажите как правильно задать размер JPanel чтобы JFrame при pack() сжимался до размеров JPanel, задание размеров при помощи setSize...

12
 Аватар для Skipy
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
18.06.2013, 18:19
Цитата Сообщение от zeooon Посмотреть сообщение
Пожалуйста, посоветуйте что нибудь...
В 42-й строке плюс исправьте на минус. Может, поможет...
0
0 / 0 / 0
Регистрация: 08.06.2012
Сообщений: 4
18.06.2013, 20:41  [ТС]
Немного помчался, теперь холст отображается. Но JScrollBar нет.
0
 Аватар для AckiyBolt
653 / 402 / 35
Регистрация: 19.02.2013
Сообщений: 1,072
Записей в блоге: 2
18.06.2013, 22:45
а вы знак поменяли?
0
0 / 0 / 0
Регистрация: 08.06.2012
Сообщений: 4
18.06.2013, 22:49  [ТС]
Цитата Сообщение от AckiyBolt Посмотреть сообщение
а вы знак поменяли?
Знак тут не причем... Я не выкладывал исходник, он слишком громоздкий.
Вопрос закрыт, разобрался.
0
 Аватар для mutagen
2587 / 2260 / 257
Регистрация: 14.09.2011
Сообщений: 5,185
Записей в блоге: 18
19.06.2013, 19:05
Человеку нужно просто участие, например как мама по головке гладит и говорит: "ничего ничего - вырастешь всё получится" )
0
66 / 55 / 11
Регистрация: 16.04.2010
Сообщений: 190
Записей в блоге: 1
19.06.2013, 19:25
жжете
0
17 / 17 / 1
Регистрация: 28.03.2013
Сообщений: 80
19.06.2013, 23:15
Помогите пожалуйста, суть проблемы примерно та же.
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
class LeftPan extends JPanel{
    MainMenuFrame f;
    rightPan rightPan;
    LeftPan(MainMenuFrame f, rightPan rightPan)
    {
        this.f= f;
        this.rightPan = rightPan;
        LeftPanRev(f);
    }
    public void LeftPanRev(MainMenuFrame f)
    {
        setLayout(new FlowLayout());
        topPan topPan = new topPan(this, rightPan);
        add(topPan);
        JPanel butPan = new JPanel();
        butPan.setLayout(new FlowLayout());
        JScrollPane sb = new JScrollPane(butPan);
        sb.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
        add(sb);
        /*
        некоторый SQL запрос возвращающий ResultSet result;
         */
         while(result.next())
            {
                MainMenuButton button = new MainMenuButton(result.getInt(1),result.getString(2),result.getString(3),result.getString(4),result.getString(6));
                //setPreferredSize(new Dimension(300, 100));
                button.addActionListener(new
                ActList(topPan, rightPan, result.getInt(1)));
                butPan.add(button);
            }
Т.е. Когда на butPan добавляется достаточно много кнопок, то размер butPan - превосходит размер фрейма и LeftPan, следовательно должен появиться ScrollPane, но он не появляется. Если задать явно размер
Java
1
sb.setPreferredSize(new Dimension(300,700));
то по достижении butPan этих размеров скролл появится. Но мне нельзя задавать явно размер ScrollPane, т.к. окно масштабируемое.
0
 Аватар для Skipy
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
20.06.2013, 10:13
А без sql-запроса можете тот же пример привести? Чтобы можно было запустить и посмотреть.

P.S. Полоса прокрутки появляется только тогда, когда preferredSize контайнера станет больше видимой области scrollpane.
1
17 / 17 / 1
Регистрация: 28.03.2013
Сообщений: 80
20.06.2013, 12:07
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
public class MainMenuFrame extends JFrame
    {
        MainMenuFrame ()
    {
        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
        int locationY = (screenSize.height - DEFAULT_WIDTH) / 2;
        int locationX = (screenSize.width - DEFAULT_HEIGHT) / 2;
        setBounds(locationX, locationY, DEFAULT_WIDTH, DEFAULT_HEIGHT);
        setVisible(true);    
        setTitle("MainMenu");
        setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
        MainMenuPanel mainmnupan = new MainMenuPanel(this);
        add(mainmnupan);
    }
    int DEFAULT_WIDTH = 800;
    int DEFAULT_HEIGHT = 600;
    }
    
    class MainMenuPanel extends JPanel{
    MainMenuPanel(MainMenuFrame f)
    {       
        JPanel pan = new JPanel();
        pan.setPreferredSize(new Dimension(800, 600));
        JScrollPane sb = new JScrollPane(pan);
        add(sb);
        pan.setLayout(new FlowLayout());
        for(int i =0; i< 1000; i ++)
        {
            JButton but = new JButton("Кнопка "+i);
            but.setPreferredSize(new Dimension(800, 50));
            pan.add(but);
        }
    } 
}
Написал тот же случай, только без запросов и всего прочего.

Цитата Сообщение от Skipy Посмотреть сообщение
P.S. Полоса прокрутки появляется только тогда, когда preferredSize контайнера станет больше видимой области scrollpane.
А проблема, в том, что scrollpane расстягивает свои размеры до размера своего содержимого, и не хочет ограничиваться размерами содержащей его панели.

Добавлено через 20 минут
Методом научного тыка определил, что проблема в Layout для панели на которую помещается ScrollPane. Почему-то FlowLayout не сжимал содержимое до своего размера, а BorderLayout сжал.
0
 Аватар для Skipy
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
20.06.2013, 12:55
Цитата Сообщение от Andrew_zp1 Посмотреть сообщение
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    class MainMenuPanel extends JPanel{
    MainMenuPanel(MainMenuFrame f)
    {       
        JPanel pan = new JPanel();
        pan.setPreferredSize(new Dimension(800, 600));
        JScrollPane sb = new JScrollPane(pan);
        add(sb);
        pan.setLayout(new FlowLayout());
        for(int i =0; i< 1000; i ++)
        {
            JButton but = new JButton("Кнопка "+i);
            but.setPreferredSize(new Dimension(800, 50));
            pan.add(but);
        }
    } 
}
Написал тот же случай, только без запросов и всего прочего.
Вот так:

Java
1
2
3
4
5
6
7
8
9
10
11
        setLayout(new BorderLayout()); // 1
        JPanel pan = new JPanel();
        pan.setPreferredSize(new Dimension(800, 60000)); // 2
        JScrollPane sb = new JScrollPane(pan);
        add(sb);
        pan.setLayout(new FlowLayout());
        for (int i = 0; i < 1000; i++) {
            JButton but = new JButton("Кнопка " + i);
            but.setPreferredSize(new Dimension(800, 50));
            pan.add(but);
        }
1. По умолчанию у панели стоит FlowLayout, который компоненты не ограничивает в размерах. Чтобы ограничить Ваш контейнер, его надо в BorderLayout положить.

2. Если Вы выставите 800х600 - Вы увидите первые 10 кнопок. Надо ограничить по ширине, но не по высоте, тогда кнопки будут вертикально выстраиваться. А я бы вообще поставил GridLayout вместо FlowLayout. И preferredSize у pan вообще бы не устанавливал:

Java
1
2
3
4
5
6
7
8
9
10
11
        setLayout(new BorderLayout());
        JPanel pan = new JPanel();
        //pan.setPreferredSize(new Dimension(800, 6000));
        JScrollPane sb = new JScrollPane(pan);
        add(sb);
        pan.setLayout(new GridLayout(1000, 1));
        for (int i = 0; i < 1000; i++) {
            JButton but = new JButton("Кнопка " + i);
            but.setPreferredSize(new Dimension(600, 50));
            pan.add(but);
        }
Добавлено через 42 минуты
Цитата Сообщение от Andrew_zp1 Посмотреть сообщение
Методом научного тыка определил, что проблема в Layout для панели на которую помещается ScrollPane. Почему-то FlowLayout не сжимал содержимое до своего размера, а BorderLayout сжал.
Потому что так они устроены.
1
17 / 17 / 1
Регистрация: 28.03.2013
Сообщений: 80
20.06.2013, 18:28
Цитата Сообщение от Skipy Посмотреть сообщение
Вот так:
Потому что так они устроены.
Я порошу прощения, а в Вашей статье по Layout'ам описано как они обращаются с размерами содержимого? А то я уже сделал весь интерфейс программы, но все делал методом проб и ошибок, а хотелось бы прочитать теорию, как оно есть на самом деле. Знаю, что в офф. документации это есть, но там на английском я не люблю читать.
0
 Аватар для Skipy
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
21.06.2013, 12:15
Цитата Сообщение от Andrew_zp1 Посмотреть сообщение
Я порошу прощения, а в Вашей статье по Layout'ам описано как они обращаются с размерами содержимого?
Интересный вопрос... Ну, во-первых, можно почитать и посмотреть, описано или нет. Во-вторых - да, описано. Проверил первые пять, наиболее используемые. В частности, в описании FlowLayout точно есть то, что я говорил.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.06.2013, 12:15
Помогаю со студенческими работами здесь

Удаление JPanel кнопкой на этом же JPanel
Есть JPanel объекты, которые представляют собой панельки с какой - то информацией, на них есть кнопка. Как сделать так, чтобы при нажатии...

Управление JScrollPanel
Есть свой гарфический редактор и у него класс холст, нужно добавить на холст скрол, чтобы если изображение которое загружаю большое очень,...

Замена JPanel на JPanel в JFrame
У меня есть 3 класса. Первый класс Main наследуется от JFrame и в конструкторе установка размера и добавление JPanel второго класса....

JScrollPanel прокручивает не до конца
Здравствуйте. Перерыл все подобные вопросы на эту тему, но так и не смог найти решения. У меня есть JPanel к которой привязан...

JScrollPanel отображает только 5 рядов
таблица 10 рядов, находится внутри JScrollPanel JScrollPanel отображает только 5 рядов Как установить(выделить) последний...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru