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

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

14.02.2020, 01:59. Показов 3856. Ответов 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
2881 / 1386 / 411
Регистрация: 11.08.2017
Сообщений: 4,415
Записей в блоге: 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
2881 / 1386 / 411
Регистрация: 11.08.2017
Сообщений: 4,415
Записей в блоге: 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
2881 / 1386 / 411
Регистрация: 11.08.2017
Сообщений: 4,415
Записей в блоге: 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
2881 / 1386 / 411
Регистрация: 11.08.2017
Сообщений: 4,415
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
Вывод данных через динамический список в справочнике
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru