Форум программистов, компьютерный форум, киберфорум
Java: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
 Аватар для Goongala
1022 / 562 / 185
Регистрация: 18.08.2013
Сообщений: 2,027
Записей в блоге: 2

Отображение панелей во фрейме

26.06.2019, 14:52. Показов 2432. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В общем-то, есть программа, во фрейме которой лежат объекты, которые можно перетаскивать с помощью мыши. Объекты эти представляют собой класс, расширяющий JPanel, все лежат в другой панели, в которой дефолтный layout (FlowLayout вроде как ставится по умолчанию у панелей). Ну и собсна, в чём вопрос. Панельки перекрывают друг-друга в порядке добавления во фрейм, т.е. первая добавленная перекрывают вторую, вторая перекрывает третью и т.д.

Как я понимаю, они слоями добавляются. Но вот можно ли как-то так сделать, чтоб когда пользователь кликал мышью по панельке, она выводилась на передний план?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.06.2019, 14:52
Ответы с готовыми решениями:

Swing, отображение JMenu на фрейме
пытаюсь отобразить меню на фрейме,не совсем получается... public class InterfacePhoneClass; { public static void main(String...

Нестабильное отображение элементов на фрейме
Добдень, Такой баг(картинку прикрепил): Создал фрейм, добавил прогресбар, запускаю - фрейм пустой, потянул за него (изменил размер...

Поочередное отображение панелей
Public Class test1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click ...

13
296 / 149 / 67
Регистрация: 22.02.2017
Сообщений: 592
26.06.2019, 17:26
в каждом своем ответе я призываю применять JLayeredPane, и только его, но никто не слушает, все ведь книжки читают.

Почитайте про: moveToFront(); moveToBack(); getPosition(); setPosition(); Здесь все что нужно что иметь контроль, нет, иметь полную власть над уровнями объектов.
Миниатюры
Отображение панелей во фрейме   Отображение панелей во фрейме   Отображение панелей во фрейме  

1
296 / 149 / 67
Регистрация: 22.02.2017
Сообщений: 592
26.06.2019, 17:31
Как видно на картинках персонаж может заходить за предметы или наоборот быть на первом плане
Миниатюры
Отображение панелей во фрейме  
0
 Аватар для Kukstyler
1260 / 870 / 268
Регистрация: 02.04.2009
Сообщений: 3,307
26.06.2019, 22:42
Gungala,

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
import java.awt.Color;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
 
public class Window extends JFrame{ 
    private JPanel panel1 = new JPanel();
    private JPanel panel2 = new JPanel();
    public static Window main = null;
    MouseAdapter mouseAdapter = new MouseAdapter() {
        public void mouseClicked(MouseEvent e) {  
            main.setComponentZOrder(e.getComponent(), 0);   
            main.repaint();
        }  
    };
    
    public Window() {
        super.setTitle("Window");
        this.setSize(800, 600);     
        
        this.setLayout(null);
        
        this.add(panel1);
        this.add(panel2);
        
        panel1.setBounds(100, 100, 200, 200);
        panel2.setBounds(200, 200, 200, 200);
        
        panel1.setBackground(new Color(0xFF, 0xCC, 0x33));
        panel2.setBackground(new Color(0xAA, 0x11, 0x77));
        
        panel1.add(new JLabel("Panel 1"));
        panel2.add(new JLabel("Panel 2"));
                
        this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
        
        panel1.addMouseListener(mouseAdapter);          
        panel2.addMouseListener(mouseAdapter);
        
        this.setLocationRelativeTo(null);
        this.setVisible(true);
    }
    
    public static void main(String[] args) {        
        main = new Window();        
    }
}
1
296 / 149 / 67
Регистрация: 22.02.2017
Сообщений: 592
26.06.2019, 23:47
глупо, а если объекты разные ? Называется голь на выдумки хитра, есть такой замечательный ресурс JLayeredPane, почему вы его игнорируете ? Вот пример как можно менять уровни по индексу, хоть пачками хоть сотнями любых размеров форм и расцветок. Зачем вам костыли когда есть феррари ?

Java
1
2
3
4
5
6
7
8
9
10
11
if (flag)
{
    layeredPane.setLayer(jlabel, new Integer(499), 0);
}
else
{
      layeredPane.setLayer(jlabel, new Integer(50), 0);
}
 
 
//P.S. И, боже вас сохрани, не читайте до обеда советских газет.
Добавлено через 10 минут
с JLayeredPane можно менять положение всех объектов которые добавлены в него, кнопки панели и прочее.
1
 Аватар для Goongala
1022 / 562 / 185
Регистрация: 18.08.2013
Сообщений: 2,027
Записей в блоге: 2
27.06.2019, 01:02  [ТС]
Nidl, ну, я прежде не знал о существовании этого феррари, буду изучать, спасибо
0
 Аватар для Kukstyler
1260 / 870 / 268
Регистрация: 02.04.2009
Сообщений: 3,307
27.06.2019, 01:48
Nidl, поосторожнее на поворотах, Милейший. Почитайте, что такое ZOrder в GUI философии в целом. Потом почитайте, что такое индекс (о котором Вы говорили, но однозначно не знаете, что это такое). А в конце, пересмотрите код, и обратите хорошенько внимание на линию 14.
0
296 / 149 / 67
Регистрация: 22.02.2017
Сообщений: 592
27.06.2019, 08:14
Kukstyler, Уважаемый вы видели мои скриншоты сверху ? вот этот как вы выразились "индекс" о котором я ничего не знаю на примере данной игры создает полностью управляемую вселенную объектов, все в игре 4 основных слоя и в каждом слое от 5 до тысячи индексов которые без моего вмешательства в потоке создают полную иллюзию правильного расположения всех объектов, можно прятаться за деревья, башни, дома и все это постоянно через код обрабатывается перетасовыя как колоду уровни в зависимости от того как это нужно персонажу, в коде я не путаюсь, я создал редактор уровней который создает графическую часть и кусок кода который я просто вставляю в основной код копипастом.

мне в корне вообще не интересно что такое ZOrder, я из старой школы и начинал с древнего ассемблера, добравшись до Java GUI я перешагнул за полтора десятков языков программирования, я делаю игры и только игры, остальное неинтересно либо довесок, мои игры на 80% состоят и высшей математики и геометрии. я не отрицаю что вы много наверное книжек прочитали но добрую половину библиотек и классов я с прекрасным успехом заменил математикой сам которая является универсальным знанием во всех языках. Книг по джава я не читал мне не интересен этот копипаст, я выдел для себя список что мне нужно знать в совершенстве что бы игры делать и на джава и тщательно изучил эти моменты.

Мои знания это около 1,5 к всяческих графических эффектов и трюков наработанных десятилетиями, я начинал когда 3D был не класс а математическая теорема Пифагора.

И мне не понятна ваша претензия хотя бы в том что JLayeredPane это ендинственный инструмент управления слоями в java GUI отвечающий всем потребностям, и почему вы игнорите правильный не оспаримый ответ.

Добавлено через 33 минуты
Из любопытства я взглянул на описание ZOrder, это старая технология AWT, уже после этого читать стало не интересно, но все же еще раз посмотрел, имеет ряд проблем которые создают баги с размерами объектов, не работает с менеджерами раскладки, вообще внимания не стоит, не удивительно что при поиске информации управления уровнями о нем сейчас не упоминания учитывая что есть JLayeredPane.
0
 Аватар для Kukstyler
1260 / 870 / 268
Регистрация: 02.04.2009
Сообщений: 3,307
27.06.2019, 23:06
Цитата Сообщение от Nidl Посмотреть сообщение
мне в корне вообще не интересно что такое ZOrder
В таком случае не разглагольствуйте, публично говоря о "глупостях" в которых сами ни бум-бум (с).

Цитата Сообщение от Nidl Посмотреть сообщение
я делаю игры и только игры
С чем Вас и поздравляю. Только где ТС говорил о играх? Человек спрашивал о элементарном компоненте стандартного GUI. На счёт игр - ни слова.

Цитата Сообщение от Nidl Посмотреть сообщение
И мне не понятна ваша претензия хотя бы в том что JLayeredPane это ендинственный инструмент управления слоями в java GUI отвечающий всем потребностям
Это Вы так поняли мою "претензию"?

Цитата Сообщение от Nidl Посмотреть сообщение
ZOrder, это старая технология AWT
ZOrder не является понятием из Java, а из общей "философии GUI".

Моя единственная претензия к Вам - не говорите, что кто-либо говорит глупости, если у Вас нет на это чёткой и обоснованной аргументации. Не зная чти такое ZOrder - у Вас её быть просто не может.

В любом случае, предлагаю закругляться с флудом.
0
27.06.2019, 23:11  [ТС]

Не по теме:

Цитата Сообщение от Kukstyler Посмотреть сообщение
В любом случае, предлагаю закругляться с флудом.
Ваш диалог достаточно познавательный. Если есть что-нибудь ещё интересное, то можно и продолжить :D

0
296 / 149 / 67
Регистрация: 22.02.2017
Сообщений: 592
28.06.2019, 00:19
Игра приводилась как яркий пример применения смены уровней, более яркого примера чем игровые миры для этой задачи придумать нельзя.

-ZOrder не является понятием из Java, а из общей "философии GUI". - вы серьезно ? Не знал что это "setComponentZOrder" возвели в культ

я признаю только одну философию, это математика, а точнее ее раздел геометрия, все остальное считаю дорогой в никуда. Языки программирования с их библиотеками и классами умирают пачками а математика одинакова применима в любом языке программирования. У зацикленных пользователей на бесполезных копипаст книжках уже трудности с многими вещами которые раньше делались парочкой формул, сейчас вы ищете библиотеку или класс, еще и мнимую философию приплели.

Автору был дан лучший ответ по управлению уровней, пусть сам решает, следовать к новым лучшим проектам или поклоняться вашему ZOrder.


Пример хорошего спорт кара, объектов можно сделать сколько хотите.

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
102
103
104
105
106
107
108
109
110
111
112
113
114
115
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JLayeredPane;
import javax.swing.JPanel;
import javax.swing.SwingConstants;
import javax.swing.border.Border;
 
 
public class Layer
{
    public JFrame win;
    public JLayeredPane swap;
    public JLabel[] jl = new JLabel[5];
    public int z = jl.length - 1;
    
    
    public Layer()
    {
        makeWindow();
        makeElement();
    }
    
    
    private void makeWindow()
    {
        JPanel panel = new JPanel();
        panel.setPreferredSize(new Dimension(800, 600));
        panel.setOpaque(false);
        
        win = new JFrame("Layer");
        swap = new JLayeredPane();
        swap = win.getLayeredPane();
        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()
    {
        for (int i = 0; i < jl.length; i++)
        {
            jl[i] = new JLabel();
            jl[i].addMouseListener(new MouseAdapter()
            {
                public void mousePressed(MouseEvent e)
                {
                    swap.setLayer(jl[z], new Integer(z), 0);
                    z = new Integer(Integer.parseInt(((JLabel) e.getSource()).getName()));
                    swap.setLayer(((JLabel) e.getSource()), new Integer(50), 0);
                }
                   
                   
                public void mouseReleased(MouseEvent e)
                {
                    //...
                }
                  
                
                public void mouseDragged(MouseEvent e) 
                {
                    //...
                }
                
                    
                public void mouseClicked(MouseEvent e)
                {
                    //...
                }
               
               
                public void mouseEntered(MouseEvent e)
                {
                    //...
                }
 
                
                public void mouseMoved(MouseEvent e)
                {
                    //...
                }
            });
            Border border = BorderFactory.createLineBorder(Color.RED, 3);
            jl[i].setBounds(100+i*100, 300, 200, 100);
            jl[i].setBackground(Color.BLUE);
            jl[i].setText(i+"");
            jl[i].setName(i+"");
            jl[i].setFont(new Font("Arial", Font.BOLD, 50));
            jl[i].setHorizontalAlignment(SwingConstants.CENTER);
            jl[i].setVerticalAlignment(JLabel.CENTER);
            jl[i].setForeground(Color.WHITE);
            jl[i].setBorder(border);
            jl[i].setOpaque(true);
            jl[i].setLayout(null);
            swap.add(jl[i], new Integer(i), 0);
        }
    }
    
    
    public static void main(String[] args)
    {
        new Layer();
    }
}
Обратите внимание что предыдущий объект возвращается на свой уровень.
0
 Аватар для Kukstyler
1260 / 870 / 268
Регистрация: 02.04.2009
Сообщений: 3,307
28.06.2019, 20:48
Цитата Сообщение от Nidl Посмотреть сообщение
возвели в культ
Слушайте, не надо нам рассказывать Ваши сны! Никто никуда ничего не возводил.
Либо Вы пытаетесь "троллиться", либо перепутали таблетки - хорошо читайте проспекты, а так-же, прежде, консультируйтесь с врачом либо фармацевтом.
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
28.06.2019, 22:16
Цитата Сообщение от Kukstyler Посмотреть сообщение
предлагаю закругляться с флудом

Не по теме:


Цитата Сообщение от Nidl Посмотреть сообщение
И, боже вас сохрани, не читайте до обеда советских газет.
5 баллов!


0
 Аватар для Aviz__
2758 / 2065 / 509
Регистрация: 17.02.2014
Сообщений: 9,492
11.07.2019, 12:59
Цитата Сообщение от Kukstyler Посмотреть сообщение
ZOrder
Нисколько не пытаюсь принизить кого бы то ни было, но вот, что говорит Шилд, в старой книге "Swing. Руководство для начинающих" на 29 стр.:
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
11.07.2019, 12:59
Помогаю со студенческими работами здесь

Отображение другого сайта во фрейме
Здравствуйте, друзья. Поставлена такая задача: есть страница, нужно отобразить два фрейма, в одном будет шапка, которая не должна...

Неправильно отображение в плавающем фрейме
Не получается убрать эти непонятные отсупы, скажите ,как их убрать. Вот файл с которого идёт загрузка. &lt;!DOCTYPE HTML&gt; ...

PyQt5 | Отображение виджета во фрейме
Доброго времени суток. Столкнулся со следующей проблемой: у меня есть виджет, который рисует текст, и фрейм, в котором нужно этот текст...

Смещенное отображение прямоугольника во фрейме
Всем привет! Разбираюсь с основами графических интерфейсов по Хорстману, возник вопрос. Почему когда мы задаем размер фрейма, например 400...

Отображение содержимого во фрейме с прокруткой
Здравствуйте, уважаемые форумчане! Как отобразить содержимое (текст, например) во фрейме с прокруткой - как в лицензионном соглашении -...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru