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

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

21.10.2019, 20:18. Показов 4031. Ответов 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
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru