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

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

21.10.2019, 20:18. Показов 4079. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла: Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере нетипового документа выдачи шин для спецтехники с табличной частью, разработанного в конфигурации КА2. Данные берутся из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru