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

Проблемы с Layout

04.01.2013, 16:25. Показов 1164. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В чем беда: пытаюсь нарисовать на фрейме 2 элемента но рисуется только один, рисуется только с BorderLayout(), с другими не рисуется. Вот код:

Класс вершины, который пытаюсь рисовать

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
public class Peak extends JPanel
{
    private Panel drawPanel;
    // коор. верхнего левого угла прямоугольника
    private int xRect, yRect;
    // ширина и высота прямоугольника
    private int widthRect, heightRect;
    // коор. относительно коор. верх. левого угла прямоуг.
    private int xPosition, yPosition;
  
    private boolean drag;
    public Panel getPanel()
    {
        return drawPanel;
        
    }
    
    
    public void paint(Graphics g) {
        g.setColor(Color.BLUE);
        g.fillOval(xRect, yRect, widthRect, heightRect);
        g.setColor(Color.BLACK);
        g.drawOval(xRect, yRect, widthRect, heightRect);
    }
 
 
    Peak(final int x, final int y)
    {   
        
        xRect = x;
        yRect = y;
        widthRect = 50;
        heightRect = 50;
       
        drawPanel = new Panel() {
                public void paint(Graphics g) {
                    g.setColor(Color.BLUE);
                    g.fillOval(xRect, yRect, widthRect, heightRect);
                    g.setColor(Color.BLACK);
                    g.drawOval(xRect, yRect, widthRect, heightRect);
                }
                
            };
            drawPanel.addMouseListener(new MouseAdapter() {
                
                public void mousePressed(MouseEvent e) {
                    
                    xPosition = e.getX() - xRect;
                    yPosition = e.getY() - yRect;
                  //  xPosition = e.getX();
                   // yPosition = e.getY();
                    // проверка на пападание в область прямоугольника
                    if( (e.getX() >= xRect) && (e.getX() <= (xRect + widthRect)) &&
                            (e.getY() >= yRect) && (e.getY() <= (yRect + heightRect)) ) {drag = true;}
     
     
                }
                
                public void mouseReleased(MouseEvent e){drag = false;}
            });
     
            drawPanel.addMouseMotionListener(new MouseMotionAdapter() {
     
                public void mouseDragged(MouseEvent e) {
                  
                    if(drag) {
                        xRect = e.getX() - xPosition;
                        yRect = e.getY() - yPosition;
     
                  // проверка на выход за область панели
                        if(xRect < 0) {
                            xRect = 0;
                        } else if(xRect > drawPanel.getWidth() - widthRect) {
                            xRect = drawPanel.getWidth() - widthRect;
                        }
                        if(yRect < 0) {
                            yRect = 0;
                        } else if(yRect > drawPanel.getHeight() - heightRect) {
                            yRect = drawPanel.getHeight() - heightRect;
                        }
                  
                    }
                    drawPanel.setLocation(x, y);
                    drawPanel.setSize(50, 50);
                    drawPanel.repaint();
                }
            });
    }
 
}
Класс Главного окна(Тут вся движуха)
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
public class MainFrame 
{
 
 
    public static void main(String[] args) throws InterruptedException 
    {
        SwingUtilities.invokeLater(new Runnable() 
        {
            
            @Override
            public void run() 
            {
                    
                    JWindow w = new JWindow();
                    JLabel j = new JLabel();
                    JFrame mframe = new JFrame();
                    mframe.setSize(800, 600);
                    final JPanel pan = new JPanel();
                    pan.setLayout(new BorderLayout());
                    mframe.setVisible(true);
                    Peak p1 = new Peak(100, 100);
                    pan.add(p1.getPanel());
                    p1.repaint();
                    mframe.add(pan);
                    mframe.repaint();
                    Peak p2 = new Peak(300, 300);
                    pan.add(p2.getPanel());
                    mframe.add(pan);
                    p2.repaint();
                    mframe.repaint();
                    mframe.repaint();   
            }
        });
    
    }
 
}
Как видите создаю 2 Образца класса Peak(p1, p2) добавляю их на JPanel Pan; Затем панель на JFrame mframe, но к сожалению на Фрейме рисуеться только один peak =((
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.01.2013, 16:25
Ответы с готовыми решениями:

Проблемы с освоением Xamarin.Android, навигацией между layout
Всем привет!!! Создала приложение на шаблоне &quot;Приложение панели навигации&quot; Создаю layout и при попытке перейти на него возникает...

Анимированный дизайн смены Layout или просто выдвигаемый layout
Ну, думаю тут и так всё понятно. Я просто не знаю, какие ключевые слова вводить в гугл, всё что попадается это Drawer А мне нужнен просто...

At android.widget.LinearLayout.setChildFrame Layout в Layout-те
Нужен совет бывалых. У меня есть активити которое запускается с мейн активити, на нем лежит Layout (горизонтальный) в котором 2й...

9
 Аватар для Skipy
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
09.01.2013, 15:04
Вопрос за засыпку. Куда при использовании BorderLayout добавляется элемент при вызове метода add(Component), т.е. без указания constraint-а? И как ведет себя контейнер, если так добавить два компонента?

1
0 / 0 / 0
Регистрация: 04.01.2013
Сообщений: 18
20.01.2013, 14:29  [ТС]
Контейнер ведет себя след образом, при добавлении еще 1 элемента старый исчезает.
0
 Аватар для Skipy
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
21.01.2013, 12:50
Тогда что Вас удивляет?
1
0 / 0 / 0
Регистрация: 04.01.2013
Сообщений: 18
21.01.2013, 21:15  [ТС]
Меня ни чего не удивляет, я лишь хочу чтобы на JFrame оставались оба, а как это сделать я не знаю , не могу разобраться с этими Layoutamи , вот и попросил помощи.
0
 Аватар для Skipy
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
22.01.2013, 17:30
Тогда скажите, как они должны располагаться. Пока Вы добавляете панели в центр - не получится. Как надо? Опишите и разложим, это не проблема.
0
0 / 0 / 0
Регистрация: 04.01.2013
Сообщений: 18
23.01.2013, 06:58  [ТС]
Где они должны располагаться ? Хороший вопрос, в идеале они должны появляться там где пользователь кликнет мышкой.
0
 Аватар для Skipy
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
23.01.2013, 11:08
Я перестал что-либо понимать. Вы рисуете интерфейс, говорите, что на форме должны располагаться две компоненты, а у Вас не получается их так расположить. А потом оказывается, что есть еще какой-то пользователь, который должен кликнуть мышкой и указать место. У Вас сообще какая задача? Вы что хотите написать?
0
0 / 0 / 0
Регистрация: 04.01.2013
Сообщений: 18
23.01.2013, 15:24  [ТС]
Я планировал написать редактор графов. И да в идеале вершинка должна располагаться там где пользователь кликнет мышкой. Но прежде чем переходить к этому я хотел научится добавлять несколько вершин на Frame , но этого у меня так и не получилось я завис на этом месте.
0
 Аватар для Skipy
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
23.01.2013, 15:57
М-да...

1. Забудьте про layout-ы. С их помощью графы Вы не разложите, разве что напишете свой layout. В лучшем случае ставить null и позиционировать компоненты абсолютно.

2. Но я бы и от этого отказался - ибо связи Вам по любому придется отрисовывать на компоненте, где лежат узлы. Для такой задачи наилучший вариант - собственная компонента. Которая уже будет уметь обрабатывать клики мышью, рисовать узлы, связи и т.д.

В общем, Вам вот сюда:
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.01.2013, 15:57
Помогаю со студенческими работами здесь

Не хочет работать в layout, но включается в layout-land
доброе утро ! пишу первое приложение. обычный мейн.хмель выглядит вот так : &lt;?xml version=&quot;1.0&quot;...

Использование Layout в другом Layout
Нужно в одной форме использовать 2 вида Layout, причем один должен быть вложен в другой, это реально?

Insert Layout из Layout
Добрый день, подскажите пожалуйста почему этот код не работает: layout-&gt;insertLayout(1, edit_layout); layout-&gt;insertItem(1,...

Добавить layout на layout
Нашёл такой код: layout.add(view); только не понимаю куда его писать. Нужно чтобы один layout можно было использовать в нескольких других. ...

Layout
Здравствуйте! На layout кидаю изображение через ImaageView, при эмуляции по бокам экрана есть отступ.ImageView (по содержимому,вставлял...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru