Форум программистов, компьютерный форум, киберфорум
Java: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.61/18: Рейтинг темы: голосов - 18, средняя оценка - 4.61
 Аватар для Гайфи
21 / 13 / 7
Регистрация: 17.10.2015
Сообщений: 126

Расстояние между компонентами в BoxLayout

21.10.2019, 20:18. Показов 4000. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер.
У меня появилась необходимость сделать интерфейс программы на Swing, но я не понимаю, как прижать панель с кнопками вверх, а нижний лейбл - вниз. На фрейм поставил BoxLayout по вертикальной оси. BorderLayout для данной задачи не подойдет.скриншот

Даже используя
Java
1
Box.CreateVerticalGlue()
расстояние между кнопками, которого быть не должно, все равно тянется.

Одно решение я нашел - ткнуть в нужное место TextLabel, который замостит все ненужное расстояние. Но это уже такой костыль, что стыдно становится.
Вот как это выглядит: скрин
Это, по сути, то что нужно. Но нет ли какого-то более подходящего компонента, который вел бы себя так же?
Миниатюры
Расстояние между компонентами в BoxLayout  
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.10.2019, 20:18
Ответы с готовыми решениями:

При растяжении окна увеличивается расстояние между компонентами
Здравствуйте. Начал делать форму с множеством label-ов, button-ов и т. п., но когда я их всех раскидал и распределил между ними...

При ресайзе окна программы сохранять расстояние между image компонентами
Здравствуйте, форумчане. На форме есть компоненты image-кнопки, расположил их по цетру окна, применил Align по центру окна программы....

Пожалуйсто обясниту разницу на пример между TImage и TDBImage и т.д между обичнами компонентами и DB компонентами
Здарова люди ;) Пожалуйсто обясниту разницу на пример между TImage и TDBImage и т.д между обичнами компонентами и DB компонентами...

8
 Аватар для Goongala
1022 / 562 / 185
Регистрация: 18.08.2013
Сообщений: 2,027
Записей в блоге: 2
21.10.2019, 20:32
А другой layout manager использовать не вариант?
0
 Аватар для Гайфи
21 / 13 / 7
Регистрация: 17.10.2015
Сообщений: 126
21.10.2019, 20:39  [ТС]
Цитата Сообщение от Gungala Посмотреть сообщение
А другой layout manager использовать не вариант?
Я бы с радостью, но какой?
В BorderLayout расстояние все равно продолжит ездить.
0
 Аватар для Goongala
1022 / 562 / 185
Регистрация: 18.08.2013
Сообщений: 2,027
Записей в блоге: 2
21.10.2019, 21:04
Гайфи, GridLayout, GridBagLayout. Вообще, их можно комбинировать, чтобы создавать сложные GUI. Тип, создаёшь несколько панелей, внутри каждой панели по-своему, с помощью конкретного менеджера компоновки организуешь элементы, потом добавляешь все панели во фрейм. Крайне нудная тема, но если разобраться, то будет оч легко клепать интерфейсы
1
 Аватар для Гайфи
21 / 13 / 7
Регистрация: 17.10.2015
Сообщений: 126
22.10.2019, 19:23  [ТС]
Хорошо, пойду искать в сторону гридов. Спасибо.
0
296 / 149 / 67
Регистрация: 22.02.2017
Сообщений: 592
23.10.2019, 09:01
Цитата Сообщение от Gungala Посмотреть сообщение
GridLayout, GridBagLayout. Вообще, их можно комбинировать, чтобы создавать сложные GUI. Тип, создаёшь несколько панелей, внутри каждой панели по-своему, с помощью конкретного менеджера компоновки организуешь элементы, потом добавляешь все панели во фрейм. Крайне нудная тема, но если разобраться, то будет оч легко клепать интерфейсы
Такие советы даже врагам как то не благородно давать...

Гайфи, про это забудьте и не трогайте эту ущербность - GridLayout, GridBagLayout
Ставите setLayout(null); а а дальше X и Y, кординаты храните в массиве или в матрицах или прибиваете все на один раз, как вам угодно.

Под рукой нет ничего но вот например на такое взгляните
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
import java.awt.Color;
import java.awt.Dimension;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSlider;
import javax.swing.border.Border;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
 
public class ColorRGB
{
    public JFrame win;
    public JSlider[] sliderRGB = new JSlider[3];
    public JLabel colorWatch;
    
    
    public ColorRGB()
    {
        makeWindow();
        makeElement();
    }
    
    
    private void makeWindow()
    {
        JPanel panel = new JPanel();
        panel.setPreferredSize(new Dimension(800, 600));
        panel.setOpaque(false);
        
        win = new JFrame("Color");
        win.add(panel);
        win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        win.setResizable(false);
        win.getContentPane().setBackground(Color.WHITE);
        win.pack();
        win.setLayout(null);
        win.setLocationRelativeTo(null);
        win.setVisible(true);
    }
 
    
    private void makeElement()
    {
        String[] arrRGB = {"RED", "GREEN", "BLUE"};
        for (int i = 0; i < sliderRGB.length; i++)
        {
            sliderRGB[i] = new JSlider(JSlider.HORIZONTAL, 0, 255, 0);
            sliderRGB[i].setBounds(100, 300+i*90, 600, 70);
            sliderRGB[i].setBorder(BorderFactory.createTitledBorder(arrRGB[i]));
            sliderRGB[i].setBackground(new Color(224,224,224));
            sliderRGB[i].setMajorTickSpacing(0);
            sliderRGB[i].setMinorTickSpacing(15);
            sliderRGB[i].setPaintTicks(true);
            sliderRGB[i].setPaintLabels(true);
            sliderRGB[i].setOpaque(false);
            sliderRGB[i].addChangeListener(new ChangeListener()
            {
                public void stateChanged(ChangeEvent e)
                {
                    colorWatch.setBackground(new Color(
                            sliderRGB[0].getValue(), 
                            sliderRGB[1].getValue(), 
                            sliderRGB[2].getValue()));
                    colorWatch.repaint();
                }
            });
            win.add(sliderRGB[i]);
        }
        //
        Border border = BorderFactory.createLineBorder(Color.BLUE, 5);
        colorWatch = new JLabel();
        colorWatch.setBounds(250, 50, 300, 200);
        colorWatch.setBorder(border);
        colorWatch.setBackground(new Color(
                sliderRGB[0].getValue(), 
                sliderRGB[1].getValue(), 
                sliderRGB[2].getValue()));
        colorWatch.setOpaque(true);
        colorWatch.setLayout(null);
        win.add(colorWatch);
        //
        win.revalidate();
        win.repaint();
    }
    
    
    public static void main(String[] args)
    {
        new ColorRGB();
    }
}
В рисовалке что на скринет не вообще и намека на GridLayout, GridBagLayout
Миниатюры
Расстояние между компонентами в BoxLayout  
1
 Аватар для Goongala
1022 / 562 / 185
Регистрация: 18.08.2013
Сообщений: 2,027
Записей в блоге: 2
23.10.2019, 09:14
Ну да, задавать координаты вручную для каждого компонента, конечно же, куда удобнее
0
296 / 149 / 67
Регистрация: 22.02.2017
Сообщений: 592
23.10.2019, 09:16
Gungala, и все таки странно все это, то вы взмываете соколом до высоких материй и Java ниже 10 не карамелька, чувствуйте отсутствие комфорта без лямбда выражений, то вдруг спускаете до уровня когда мамонты бегали по земле и советуете панаму из соломы да лапти плетены, это я о GridLayout, GridBagLayout

Добавлено через 1 минуту
Цитата Сообщение от Gungala Посмотреть сообщение
Ну да, задавать координаты вручную для каждого компонента, конечно же, куда удобнее
зато геморрой не беспокоит (GridLayout, GridBagLayout)
0
 Аватар для Goongala
1022 / 562 / 185
Регистрация: 18.08.2013
Сообщений: 2,027
Записей в блоге: 2
23.10.2019, 09:22
уф, делайте, как знаете
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.10.2019, 09:22
Помогаю со студенческими работами здесь

Расстояние между двумя множествами точек - это расстояние между наиболее близко расположенными точками этих
1. Расстояние между двумя множествами точек - это расстояние между наиболее близко расположенными точками этих множеств. Найти расстояние...

Скорость первого автомобиля V1 км/ч, второго — V2 км/ч, расстояние между ними S км. Определить расстояние между ними через T часов, если автомобили пе
Скорость первого автомобиля V1 км/ч, второго — V2 км/ч, расстояние между ними S км. Определить расстояние между ними через T часов, если...

Найти расстояние от начала координат до каждой точки и расстояние между точками
задача на С++ На плоскости заданы точки своими координатами. Найти расстояние от начала координат до каждой точки и расстояние между...

Аналитическая геометрия: расстояние между точками, расстояние от точки до прямой и т.д
всем привет! есть несколько задачек, которые нужно реализовать на vb .net, буду рад если поможете собственно задачи (по аналитической...

Линия между компонентами
У меня на форме есть Frame1 и Frame2. Вопрос: как сделать линию между ними?


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
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 . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru