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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> JPanel в Jpanel-e 
:(
    Опции темы
AntonSaburov
Дата 22.2.2005, 16:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: 10
Всего: 118



Этот код прекрасно собирается под 1.4.2

Код

import java.awt.*;
import javax.swing.*;

public class Focus extends JFrame
{
 public Focus()
 {
   JButton btn = new JButton("OK");
   getContentPane().add(BorderLayout.NORTH, btn);
   
   setBounds(100,100,500,500);
 }

 public static void main(String[] args)
 {
   Focus my = new Focus();
   my.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   my.setVisible(true);
 }
}

PM MAIL WWW ICQ   Вверх
djGri
Дата 22.2.2005, 16:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

Репутация: 1
Всего: 3



AntonSaburov
В этом случае работает:
Код

getContentPane().add(BorderLayout.NORTH, btn);


А в этом нет:
Код

myPanel = new MyPanel();
      JPanel panel = new JPanel();
      panel.add(myPanel, BorderLayout.NORTH);



Это потому, что у JFrame - default layout = Border Layout

Это сообщение отредактировал(а) djGri - 22.2.2005, 16:36
PM MAIL   Вверх
AntonSaburov
Дата 22.2.2005, 17:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: 10
Всего: 118



Я не понимаю, почему у тебя panel.add имеет параметры в странном порядке ?

А кроме того у панели по умолчанию другой layout.
PM MAIL WWW ICQ   Вверх
djGri
Дата 22.2.2005, 17:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

Репутация: 1
Всего: 3



Цитата(AntonSaburov @ 22.2.2005, 16:12)
А кроме того у панели по умолчанию другой layout.

Да - Flow


Цитата(AntonSaburov @ 22.2.2005, 16:12)
Я не понимаю, почему у тебя panel.add имеет параметры в странном порядке ?


panel.add ( Container, int )
PM MAIL   Вверх
Domestic Cat
Дата 22.2.2005, 18:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 13
Всего: 172



contentPane имеет дефаултом BorderLayout, потому contentPane.add(panel, BorderLayout.CENTER) добавит панель в центр. У JPanel дефаулт - FlowLayout, и дейсвительнo есть метод add(Component, int) который добавляет на позицию int. Поэтому panel.add(myPanel, BorderLayout.CENTER) добавит явно нe в центр.
Плохo, когда нет енумов, тогда б сразу выдалo ошибку.


--------------------

PM   Вверх
AntonSaburov
Дата 22.2.2005, 19:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: 10
Всего: 118



BorderLayout.CENTER имеет тип String.

PM MAIL WWW ICQ   Вверх
Domestic Cat
Дата 22.2.2005, 19:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 13
Всего: 172



Извиняусь, я имел в виду метод add(Component, Object).


--------------------

PM   Вверх
AntonSaburov
Дата 22.2.2005, 19:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: 10
Всего: 118



Посмотрел наконец первый пример - все там корректно. Просто установка размеров для MyPanel не дает эффекта. И не должно. JPanel возвращает самый маленький размер для FlowLayout. А он и будет минимальным, т.к. никаких элементов не находится на панели.
Там и получается ма-а-а-аленькая панелька в самом верху.

Так что пример работает корректно. Что ты хочешь получить на самом деле ?
PM MAIL WWW ICQ   Вверх
Domestic Cat
Дата 22.2.2005, 19:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 13
Всего: 172



Прикол в том, что в этом методе add в качствe констрейнта можно указывать все чтo угодно, если стоит FlowLayout . Например
Код

public class B extends JFrame
{  

   B()
   {
       setSize(300, 300);
       
       getContentPane().setLayout(new FlowLayout());
       getContentPane().add(new Button("Hello"), new JButton());
       setDefaultCloseOperation(EXIT_ON_CLOSE);
       setVisible(true);
   }
   
   public static void main(String[] args)    
   {
       new B();
   }
   
}



--------------------

PM   Вверх
AntonSaburov
Дата 22.2.2005, 20:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: 10
Всего: 118



Так FlowLayout никаких условий не использует.

Вот прямо из описания:
"Also notifies the layout manager to add the component to this container's layout using the specified constraints object."

Т.е. этот объект используют только те лэйауты, которые в нем нуждаются. FlowLayout к ним не относиться. Попробуй пример, в котором просто изменен лэйаут у панели - все увидишь. Отругается, что фигню дали.

Код

import javax.swing.*;
import java.awt.*;

public class MainC extends JFrame {

   private MyPanel myPanel;
 
      public MainC() {
      super("My Window");

      // 1-
      myPanel = new MyPanel();
      JPanel panel = new JPanel();
      panel.setLayout(new GridBagLayout());
      panel.add(myPanel, BorderLayout.NORTH);
      getContentPane().add(new JScrollPane(panel), BorderLayout.CENTER);
      // 2-
  }


  public static void main(String args[]) {
      MainC mainc = new MainC();
      mainc.setDefaultCloseOperation(EXIT_ON_CLOSE);
      mainc.setSize(640, 480);
      mainc.setVisible(true);
  }
}

  class MyPanel extends JPanel {
  public MyPanel() {
      setBackground(Color.white);
      Dimension dim = new Dimension(340, 240);
      this.setMinimumSize(dim);
  }
}


PM MAIL WWW ICQ   Вверх
Domestic Cat
Дата 22.2.2005, 20:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 13
Всего: 172



Дык понятно, но сам факт наличия метода сбивает с толку. Для BorderLayout все сработае; в других случаях чловек начинает писать .add(myPanel, BorderLayout.NORTH); и думаеt чтo работает с BorderLayout.


--------------------

PM   Вверх
AntonSaburov
Дата 22.2.2005, 20:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: 10
Всего: 118



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

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

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


 




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


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

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