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

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

26.06.2019, 14:52. Показов 2409. Ответов 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__
2738 / 2047 / 507
Регистрация: 17.02.2014
Сообщений: 9,465
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
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru