Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> pack() сдвинул компоненту. Почему? Не понятно почему pack вмешался во внутр 
V
    Опции темы
Mirkes
Дата 16.10.2012, 18:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 586
Регистрация: 18.8.2011
Где: Красноярск

Репутация: 2
Всего: 17



Вечер добрый. Столкнулся со странной проблемой, с которой не знаю что делать. Точнее не знаю с какого конца к ней подбираться.
Пока попробую без выкладывания кода, поскольку кода много, раскиданного по многим классам и пакетам.
Приведу код класса в котором случилось чудо.
Код

package kmeans;


import common.DeskTop;
import common.MyMenuPane;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Toolkit;

import javax.swing.JApplet;
import javax.swing.JFrame;

import top.ContentPanel;


public class Kmeans extends JApplet {
    @SuppressWarnings("compatibility:4494669966264860")
    private static final long serialVersionUID = 4320932588070777465L;


    public Kmeans() {
    }

    private void jbInit() throws Exception {
        this.getContentPane().setLayout(null);
        ContentPanel cp =ContentPanel.getInstance(1);
        cp.addPanel("Времянка", new MyMenuPane());
        cp.addPanel("Времянка", new MyMenuPane());
        cp.addPanel("Времянка", new MyMenuPane());
        cp.addPanel("Времянка", new MyMenuPane());
        this.setContentPane(cp);
        DeskTop.getInstance().fireAppletHappend(0, 9);
    }

    public void init() {
        try {
            jbInit();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        Kmeans applet = new Kmeans();
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().add(applet, BorderLayout.CENTER);
        frame.setTitle("Applet KMeans & KMedoids");
        applet.init();
        applet.start();
        frame.setResizable(false);
        
        for (Component c:frame.getContentPane().getComponents())
            System.out.println(c.getBounds()+"   "+c.getClass().getName());
        for (Component c:((JApplet)frame.getContentPane().getComponent(0)).getContentPane().getComponents())
            System.out.println(c.getBounds()+"   "+c.getClass().getName());
        Component cc = DeskTop.getInstance().getComponent(0);
        System.out.println(cc.getBounds()+"   "+cc.getClass().getName());
        System.out.println("");
        
        frame.pack();
        
        for (Component c:frame.getContentPane().getComponents())
            System.out.println(c.getBounds()+"   "+c.getClass().getName());
        for (Component c:((JApplet)frame.getContentPane().getComponent(0)).getContentPane().getComponents())
            System.out.println(c.getBounds()+"   "+c.getClass().getName());
        cc = DeskTop.getInstance().getComponent(0);
        System.out.println(cc.getBounds()+"   "+cc.getClass().getName());
        System.out.println("");

        Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
        Dimension frameSize = frame.getSize();
        frame.setLocation((d.width - frameSize.width) / 2, (d.height - frameSize.height) / 2);
        frame.setVisible(true);
    }

    public void start() {
    }

    public void stop() {
    }

    public void destroy() {
    }
}


Создается JPanel CP со строго указанными размерами 607 на 520
Внутри CP установлен BorderLayout
На север добавлена панель в которую вставлен элемент высостой 100. Предполагаемый размер 607 на 100.
На юг добавлена панель 607 на 20
В центр добавлена панель DT размером 607 на 400ю
В панель DT вставлена еще одна панель такого же размера P. 
Теперь собственно чудо.
Непосредтвенно перед вызовом метода frame.pack(); p.getLocation() показывает (0,0)
Непосредственно ПОСЛЕ вызова метода frame.pack(); p.getLocation() показывает (0,5)
Ниже результат вывода из метода main
Код

java.awt.Rectangle[x=0,y=0,width=0,height=0]   kmeans.Kmeans
java.awt.Rectangle[x=0,y=0,width=0,height=0]   javax.swing.JPanel
java.awt.Rectangle[x=0,y=500,width=607,height=20]   label.CopyLeft
java.awt.Rectangle[x=0,y=0,width=607,height=400]   common.DeskTop
java.awt.Rectangle[x=0,y=0,width=607,height=400]   draw.DrawingPanel

java.awt.Rectangle[x=0,y=0,width=607,height=520]   kmeans.Kmeans
java.awt.Rectangle[x=0,y=0,width=607,height=100]   javax.swing.JPanel
java.awt.Rectangle[x=0,y=500,width=607,height=20]   label.CopyLeft
java.awt.Rectangle[x=0,y=100,width=607,height=400]   common.DeskTop
java.awt.Rectangle[x=0,y=5,width=607,height=400]   draw.DrawingPanel

Понятно изменение размера апплета. Размеры соответсвуют ожиданиям.
JPanel получила вполне ожидаемый размер 607 на 100.
С CopyLeft ничего не произошло.
Для DeskTop указали только его положение.
А вот почему изменилось положение DrawingPanel ВНУТРИ DeskTop я не понимаю.
Кто-нибудь может подсказать в чем причина и как с этим бороться?


--------------------
Mirkes
PM MAIL   Вверх
Mirkes
Дата 16.10.2012, 19:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 586
Регистрация: 18.8.2011
Где: Красноярск

Репутация: 2
Всего: 17



Таки нашел причину. Я не сказал DeskTop, что у него нет менеджера раскладки. Можно было бы поставить OverlayLayout, но разницы судя по всему никакой не будет. Стало любопытно. Проверил. Разницы не увидел. Но если разницы нет, зачем ставить обработчик?
В общем с проблемой я разобрался, прошу прощения за то, что отвлек Ваше внимание.


--------------------
Mirkes
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   jk1
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема »


 




[ Время генерации скрипта: 0.0585 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.