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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Наследование от класса Component, Компонент не отображается  
:(
    Опции темы
__Ivan
Дата 26.12.2007, 19:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Суть проблемы в следующем: необходимо в апплете разместить закрашенные прямоугольники, которые могут менять свои размеры. 
Решил создать свой класс, решающий эту задачу, переопределив класс Component. Но он почему-то не хочет отображаться в окне апплета. Можете помочь разобраться с этой проблемой?

Мой класс:
Код

import java.awt.*;

public class myComponent extends Component
{
    public void myComponent() 
    {    
    }     
}

Фрагмент кода добавления элемента:
Код

        setLayout(null);

        mc = new myComponent();
        mc.setBounds(10, 10, 10, 30);
        mc.setBackground(Color.RED);
        
        add(mc);

PM MAIL   Вверх
ecologist
Дата 27.12.2007, 08:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Если внимательно читать документацию, то можно увидеть что

The Component class is the abstract superclass of the nonmenu-related Abstract Window Toolkit components. Class Component can also be extended directly to create a lightweight component.


Отсюда следует, что надо как минимум переопределить метод paint.

Хотя на мой взгляд лучше использовать JPanal или Panel - то и есть прямоугольники - надо только цвет у них поменять.
PM MAIL   Вверх
__Ivan
Дата 27.12.2007, 08:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Мне интересно, как это  вообще можно сделать. Какой минимальный набор методов нужно переопределить, чтобы полученный комронент отображался? Неплохо было бы посмотреть исходник такого класса...  smile 

Это сообщение отредактировал(а) __Ivan - 27.12.2007, 08:52
PM MAIL   Вверх
ecologist
Дата 27.12.2007, 09:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Код

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


public class BoxTest extends JFrame
{
  public BoxTest()
  {
    JPanel p1 = new JPanel();
    p1.setBackground(Color.GREEN);
    JPanel p2 = new JPanel();
    p2.setBackground(Color.BLUE);

    getContentPane().setLayout(new GridLayout(1,2));
    getContentPane().add(p1);
    getContentPane().add(p2);

    setBounds(100,100,200,200);
  }

  public static void main(String[] arg)
  {
    BoxTest t = new BoxTest();
    t.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    t.setVisible(true);
  }
}


По поводу Layout есть неплохая статья в FAQ - Что такое LayoutManager
PM MAIL   Вверх
__Ivan
Дата 27.12.2007, 09:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



а с помощью переопределения класса Component? 
PM MAIL   Вверх
ecologist
Дата 27.12.2007, 09:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(__Ivan @  27.12.2007,  09:14 Найти цитируемый пост)
а с помощью переопределения класса Component?  

А нужно именно этот класс переопределить ? Просто я никогда его не переопределял - смысла не вижу в таком варианте.

Добавлено через 3 минуты и 25 секунд
Ну вообщем вот вариант

Код

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


public class BoxTest extends JFrame
{
  public BoxTest()
  {
    MyComponent p1 = new MyComponent();
    p1.setBackground(Color.GREEN);
    MyComponent p2 = new MyComponent();
    p2.setBackground(Color.BLUE);

    getContentPane().setLayout(new GridLayout(1,2));
    getContentPane().add(p1);
    getContentPane().add(p2);

    setBounds(100,100,200,200);
  }

  public static void main(String[] arg)
  {
    BoxTest t = new BoxTest();
    t.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    t.setVisible(true);
  }

}

class MyComponent extends Component
{
  public MyComponent()
  {
    super();
  }

  public void paint(Graphics g)
  {
    super.paint(g);
    g.setColor(this.getBackground());
    g.fillRect(0,0, this.getWidth(), this.getHeight());
  }
}

PM MAIL   Вверх
__Ivan
Дата 27.12.2007, 12:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



если честно, то мне уже просто интересно, как это сделать. К тому же, на мой взгляд, наследовать такие вещи от Panel немного неправильно. 

PS: в исходниках Label, Button и т.д. метод paint()  не переопределяется.

Это сообщение отредактировал(а) __Ivan - 27.12.2007, 13:03
PM MAIL   Вверх
__Ivan
Дата 28.12.2007, 14:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



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

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

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

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


 




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


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

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