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

Swing и расположение обьектов на JFrame

14.02.2020, 01:59. Показов 3801. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток. Учу Java и конкретно сейчас пробую создать приложение используя Swing. Появились проблемки:
1. Мне нужно разместить кнопки и лейбл определенным образом, но так, как я пробовал не получалось

скрин того, как надо (слева кнопки справа лейбл)
Trigonometry.zip
Вот проект. Писал на NetBeans 11.2
2. Почему-то не отображается у меня пиктограмма, вообще не понимаю почему, все правильно написал...
И последний вопрос, можно ли скомпилировать в .exe файл данный проект? Если только в .jar, то запустится ли он на любом ПК?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.02.2020, 01:59
Ответы с готовыми решениями:

Swing: JList не отображается на JFrame
В Java новичек. Можно сказать что это моя первая работа в Java до сего момент только читал. Сделал класс для формирования интерфейса ...

Видимость JFrame Java Swing
Здравствуйте! У меня такой вопрос. Как сделать так, чтобы рамка окна JFrame стала невидимой, а содержимое наоборот видимым? Например: Мне...

Swing: реальные размеры JFrame
Решила поиграть со Swing и написать тетрис. Все стало ступором раньше чем ожидалось =\ Я никак не могу разобраться с размерами JFrame и...

13
6 / 3 / 0
Регистрация: 04.05.2018
Сообщений: 407
14.02.2020, 03:07  [ТС]
Чуть-чуть подправил код, вот лучше эту версию править:
Trigonometry.zip
0
6 / 3 / 0
Регистрация: 04.05.2018
Сообщений: 407
14.02.2020, 09:06  [ТС]
Вот последний мой вариант: Trigonometry.zip
Тут не работает:
  1. ActionListener
  2. Icon и пробовал но удалил уже из проекта ImageIO и Image
  3. Поле для ввода текста размещается хоть и правильно, но не так, как мне нужно
0
296 / 149 / 67
Регистрация: 22.02.2017
Сообщений: 592
14.02.2020, 13:08
1. Почитайте про JLayeredPane (так вы получите полный констроль над расположением включая многослойность).
2. Для создания .exe используйте launch4j (обязательно научитесь создавать файлы с встроенными библиотеками java, это просто. Для чего это нужно ? java автономный язык за одним но, правильность вашей программы будет обеспечено лишь той версие jdk под которую вы создали проект. Например то что создано в 7ке в 8ке перекосабочит по самое не могу).
1
5 / 3 / 2
Регистрация: 21.04.2019
Сообщений: 16
14.02.2020, 22:39
Почему бы просто не использовать конструктор SWING чтобы сделать красивый дизайн? Там и иконки, и бэкграунды и всё такое в пару кликов делается.
0
6 / 3 / 0
Регистрация: 04.05.2018
Сообщений: 407
15.02.2020, 08:02  [ТС]
Oxez, потому что я хочу понять, как это работает, научиться программироваться а не собирать графически приложения как обезьянка
1
15.02.2020, 09:53

Не по теме:

MetMark, респект и уважуха

0
Модератор
Эксперт Java
 Аватар для alecss131
2850 / 1358 / 405
Регистрация: 11.08.2017
Сообщений: 4,334
Записей в блоге: 2
15.02.2020, 10:04
хоть меня сейчас закидают тапками но напишу)) Особенно актуально если нельзя изменять размеры окна то тогда можно просто не использовать Layoutы а указать там null и тогда надо будет руками указывать положение элементов вплоть до пикселя с помощью .setBounds(). Лично мне такой вариант проще и привычней, раньше на матлабе гуи а потом на purebasic привык руками указывать положение и размеры в пикселях.
0
6 / 3 / 0
Регистрация: 04.05.2018
Сообщений: 407
15.02.2020, 10:18  [ТС]
alecss131, я тоже такой вариант предпочитаю и хотел так делать. Только вот когда указывал setBounds он не менял ничего. Где говорите указать null надо?
0
Модератор
Эксперт Java
 Аватар для alecss131
2850 / 1358 / 405
Регистрация: 11.08.2017
Сообщений: 4,334
Записей в блоге: 2
15.02.2020, 10:32
У JFrame есть метод setLayout() вот ему и надо null передать, лучше всего перед добавлением всех элементом на него.
0
 Аватар для Goongala
1022 / 562 / 185
Регистрация: 18.08.2013
Сообщений: 2,027
Записей в блоге: 2
15.02.2020, 10:59
alecss131, такой метод хорош как раз-таки только в том случае, если размер окна будет фиксированный. Если ты планируешь писать что-то, что будут использовать другие люди, нужно задействовать менеджеры компоновки. Представь, если у тебя монитор с разрешеним 1280x720 и ты компонуешь элементы согласно этому разрешению, а потом какой-нибудь человек запустит твоё приложение на 4К мониторе. Забавно будет посмотреть, насколько неказисто станет выглядеть окошко твоей программки
0
Модератор
Эксперт Java
 Аватар для alecss131
2850 / 1358 / 405
Регистрация: 11.08.2017
Сообщений: 4,334
Записей в блоге: 2
15.02.2020, 12:29
Лучший ответ Сообщение было отмечено MetMark как решение

Решение

Gungala, Пока ни разу не сталкивался с проблемами изза этого. У меня на 2 компах разные мониторы (hd и fullhd) а так же у друга нечто среднее. Всегда у окон отключаю ресайз и все выглядит везде нормально. Единственное при переносе между системами (у меня винда и мак) элементы на несколько пикселей съезжают (больше по горизонтали), но это почти не заметно.

MetMark, Вот мой вариант программы из вашего архива, кнопки работают и имхо логика работы кнопок лучше.
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
94
95
96
97
98
99
100
101
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.ScrollPaneConstants;
 
public class GUI implements ActionListener {
    private JFrame wnd = new JFrame("Trigonometry");
    private JButton btn1 = new JButton("Простейшие тригонометрические уравнения");
    private JButton btn2 = new JButton("Уравнения сводящиеся к квадратным");
    private JButton btn3 = new JButton("Третья глава");
    private JButton btn4 = new JButton("Четвертая глава");
    private JButton btn5 = new JButton("Пятая глава");
    private JButton btn6 = new JButton("Назад");
    private JTextArea ta = new JTextArea();
    private JLabel title = new JLabel("Выберите главу");
    private JScrollPane sp = new JScrollPane(ta);
    
    public static void main(String[] args) {
        new GUI();
    }
    
    GUI() {
        wnd.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        wnd.setLayout(null);
        wnd.setBounds(200, 200, 500, 500);
        wnd.setResizable(false);
        btn1.setActionCommand("btn1");
        btn2.setActionCommand("btn2");
        btn3.setActionCommand("btn3");
        btn4.setActionCommand("btn4");
        btn5.setActionCommand("btn5");
        btn6.setActionCommand("btn6");
        btn1.addActionListener(this);
        btn2.addActionListener(this);
        btn3.addActionListener(this);
        btn4.addActionListener(this);
        btn5.addActionListener(this);
        btn6.addActionListener(this);
        btn1.setBounds(5, 5, 200, 40);
        btn2.setBounds(5, 50, 200, 40);
        btn3.setBounds(5, 95, 200, 40);
        btn4.setBounds(5, 140, 200, 40);
        btn5.setBounds(5, 185, 200, 40);
        btn6.setBounds(5, 230, 200, 40);
        ta.setLineWrap(true);
        ta.setEditable(false);
        sp.setBounds(210, 30, 280, 420);
        sp.setBorder(null);
        sp.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
        title.setBounds(210, 5, 280, 20);
        wnd.add(btn1);
        wnd.add(btn2);
        wnd.add(btn3);
        wnd.add(btn4);
        wnd.add(btn5);
        wnd.add(btn6);
        wnd.add(sp);
        wnd.add(title);
        wnd.setVisible(true);
    }
 
    @Override
    public void actionPerformed(ActionEvent ae) {
        switch(ae.getActionCommand()) {
        case "btn1" : {
            title.setText(btn1.getText());
            ta.append(btn1.getText() + "\n");
            break;
        }
        case "btn2" : {
            title.setText(btn2.getText());
            ta.append(btn2.getText() + "\n");
            break;
        }
        case "btn3" : {
            title.setText(btn3.getText());
            ta.append(btn3.getText() + "\n");
            break;
        }
        case "btn4" : {
            title.setText(btn4.getText());
            ta.append(btn4.getText() + "\n");
            break;
        }
        case "btn5" : {
            title.setText(btn5.getText());
            ta.append(btn5.getText() + "\n");
            break;
        }
        case "btn6" : {
            title.setText("Выберите главу");
            ta.append("Выберите главу\n");
            break;
        }
        }
    }
}
Справа текстовое поле, у которого можно включать/отключать возможность редактирования, а так же при заполнении появится полоса прокрутки.
1
6 / 3 / 0
Регистрация: 04.05.2018
Сообщений: 407
15.02.2020, 12:49  [ТС]
alecss131, спасибо. Наконец нашелся понятный рабочий код... Но вопрос про установку пиктограммы так и остался открытым...
0
Модератор
Эксперт Java
 Аватар для alecss131
2850 / 1358 / 405
Регистрация: 11.08.2017
Сообщений: 4,334
Записей в блоге: 2
15.02.2020, 13:09
Теперь про фон и значок программы. Ресурсы стоит хранить только в папке src/main/resources и разумеется подпапках внутри этого адреса. Создайте в своем проекте такую папку и поместите туда две картинки.
А в начало конструктора (то есть между 26 и 27 строчками) следует поместить код:
Java
1
2
3
4
5
6
try {
    wnd.setIconImage(ImageIO.read(this.getClass().getResourceAsStream("/ICON.png")));
    wnd.setContentPane(new JLabel(new ImageIcon(this.getClass().getResource("/background.png"))));
} catch (IOException e) {
    e.printStackTrace();
}
Причем лучше в самое начала, так как смена фона данным способом удалит все элементы с экрана. Этим я кстати иногда пользуюсь как плюсом, меняю фон и заново собираю все элементы вместо создания нового окна.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.02.2020, 13:09
Помогаю со студенческими работами здесь

Добавить в javaProject javax.swing.JFrame;
Повторяю известный код из учебника на Eclipse import javax.swing.JFrame; public class MyWindowApp extends JFrame { //Наследуя от...

Расположение обьектов
Как мне расположить по бокам от дива ещё 2 блока? у среднего блока background:#555555; width:800px; color:#ffffff; height:100%; ...

Закрыть коннект с MySQL при закрытии окна Swing JFrame
Добрый день, уважаемые коллеги :senor: Подскажите, пожалуйста, как можно закрыть соединение с БД MySQL (подключен стандартно через...

Расположение элементов внутри JFrame
Доброго времени суток, Подскажите пожалуйста, как указать расположение элементов внутри JFrame. Метод setLocation() почему то не...

Swing-приложение (расположение компонентов, GridBagLayout)
Помогите, пожалуйста, разобраться почему некорректно отображаются компоненты (картинки во вложении)? Размеры текстовых полей заданы,...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru