Форум программистов, компьютерный форум, киберфорум
Java: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
Кандёхаем веселее!
 Аватар для MLPMan
296 / 330 / 76
Регистрация: 02.10.2012
Сообщений: 2,175

BorderLayout работает неправильно

12.11.2012, 02:23. Показов 1844. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
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
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Frame;
import java.awt.Panel;
 
 
public class Shit extends Frame{
 
BorderLayout lay = new BorderLayout();
Panel upPane = new Panel();
Panel downPane = new Panel();
Panel centerPane = new Panel();
 
public Shit(){
setSize(400,400);
setLocation(100,100);
setVisible(true);
setLayout(lay);
upPane.setSize(200,200);
upPane.setBackground(Color.red);
downPane.setSize(200,200);
downPane.setBackground(Color.green);
centerPane.setBackground(Color.blue);
add(centerPane,BorderLayout.CENTER);
add(upPane,BorderLayout.NORTH);
add(downPane,BorderLayout.SOUTH);
upPane.setSize(200,200);
downPane.setSize(300,300);
}
    
}
Как видно со скриншота, высота красной и зеленой панелей не 300 и не 200. Что это за магия?
Миниатюры
BorderLayout работает неправильно  
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
12.11.2012, 02:23
Ответы с готовыми решениями:

Размещение элементов в BorderLayout
Возможно сделать так чтобы желтая панель занимала весь левый край, а серая панель верхний край?

Размещение панелей в BorderLayout
Столкнулся вот с какой проблемой. Имеется 2 панели. В них динамически добавляются кнопки. Конструкторы идентичны, только кнопки разные. ...

Перерисовка формы и BorderLayout
Доброго времени суток. У меня тут возникло несколько вопросов. В обработчике на кнопке startAutomatButton производятся действия,...

2
 Аватар для Svoboda
70 / 70 / 17
Регистрация: 09.08.2011
Сообщений: 115
Записей в блоге: 3
12.11.2012, 11:00
MLPMan, дело в том, что менеджер компоновки Borderlayout не позволит менять размеры (и координаты) содержащихся в его ведении компонентов(контейнеров).
Есть два способа задавать абсолютные размеры для Ваших панелек:

1. Отключить менеджер компоновки для окошка вообще: setLayout(null);
2. Использовать менеджер компоновки javax.swing.BoxLayout. Можно при этом выбирать ориентацию для расположения панелек горизонтальную, или вертикальную ( X_AXIS, Y_AXIS)
Проиллюстрирую второй вариант:

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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.BoxLayout;
 
 
public class Shit extends Frame{
 
    BoxLayout box;
    Panel upPane = new Panel();
    Panel downPane = new Panel();
    Panel centerPane = new Panel();
    private int w = 200;
    private int h = 50;
     
    public Shit(){
        setLocation(100,100);
        
        /* Создаем менеджер компоновки. 
         * Параметры - само окно, для которого 
         * создаем менеджер, и ориентация 
         * расположения компонентов в окне.
         */
        box = new BoxLayout(this, BoxLayout.Y_AXIS);
        
        setLayout(box);
        upPane.setBackground(Color.red);
        downPane.setBackground(Color.green);
        centerPane.setBackground(Color.blue);
        
        add(upPane);
        add(centerPane);
        add(downPane);
        
        /* Устанавливаем размеры панелек.
         * первый параметр (w) - ширина панельки.
         * Если ширина у каждой панельки будет разная,
         * то окно будет иметь ширину самой широкой панельки. 
         */
        upPane.setPreferredSize(new Dimension(w, h));
        centerPane.setPreferredSize(new Dimension(w, h*2));
        downPane.setPreferredSize(new Dimension(w, h*3));
        
        /*
         * Эт чтоб окошко закрывалось
         */
        addWindowListener(new WindowAdapter(){
             public void windowClosing(WindowEvent e){
                 System.exit (0); 
             }
        });
        
        // Окно подстраивается под размер содержимого
        pack();
    }
    
    public static void main(String[] args){
        new Shit().setVisible(true);
    } 
}
P.S. К вопросу о магии... - на самом деле всё очень логично. Мониторы у всех разные (разрешение), и если мы будем задавать абсолютные размеры для всех элементов, то, просто-напросто, на каждом экране окошко будет выглядеть по-разному. Менеджеры компоновки же позволяют создавать окошки, которые одинаково хорошо будут смотреться на мониторах с различным разрешением. На самом деле очень удобно группировать содержимое окна с помощью менеджеров компоновки без привязки к абсолютным размерам и координатам. Лично я пользуюсь менеджерами компоновки BorderLayout, FlowLayout, GridLayout, а, к примеру, тот же самый BoxLayout почти никогда не использую
1
 Аватар для Skipy
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
12.11.2012, 15:35
Цитата Сообщение от MLPMan Посмотреть сообщение
Как видно со скриншота, высота красной и зеленой панелей не 300 и не 200. Что это за магия?
preferredSize. Не?

1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
12.11.2012, 15:35
Помогаю со студенческими работами здесь

Нужно задавать размеры в BorderLayout
При размещении компонента в BorderLayout'е он делает resize автоматически. Как сделать так чтобы можно было размеры добавляемого...

Кнопки (JButtons) и менеджер размещения BorderLayout
Вообщем, наткнулся я на проблемку. Хочу изменить размеры кнопок и разделить их, но пока выходит только это: Подскажите, как можно...

Как изменить размер элементов управления в BorderLayout?
При работе с BorderLayout размер элементов управления задаётся автоматически. Как в коде можно сделать элемент управления шире (или...

inputShowMessage() работает неправильно.
Проблема в следующем, я вызываю окно inputShowMessage(), который как я понял возвращает введенную строку в поле ввода, делаю я это...

Метод .split() неправильно работает
Нужно разбить строку на подстроки. При компиляции выдает ошибку: java.util.regex.PatternSyntaxException: Dangling meta character '*'...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru