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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Отображение собственного компонента на панели JPan, Компонент отображается только во фрейме 
V
    Опции темы
Aehn
Дата 24.4.2008, 15:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Создал простой компонент - потомок JComponent, который отображается во фрэйме, но при попытке разместить его на панели, а панель в свою очередь во фрэйм, он ( мой компонент )не отрисовывается.

Пример, когда компонет отрисовывается во фрэйме:

Код

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

   class MyComponent extends JComponent
{
    Graphics gg;
    public MyComponent()
    {
        super();

    }
    public void paintComponent(Graphics g)
    {  super.paintComponent(g);
       g.drawRect(10,10,100,100);
    }
}

public class Test {
  //  JPanel jPanel1;
    public static void main(String[] args) {
        new Test();
    }

    public Test() {

  //      jPanel1 = new JPanel();
  //      jPanel1.add(new MyComponent();

        JFrame frame = new JFrame("HelloWorldSwing");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        frame.getContentPane().add(new MyComponent());
//      frame.getContentPane().add(jPanel1);

        frame.setSize(300, 300);
        frame.setVisible(true);
    }
}


Пример, когда он не отрисовывается на панели, размещенной во фрэйме:

Код

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

   class MyComponent extends JComponent
{
    Graphics gg;
    public MyComponent()
    {
        super();

    }
    public void paintComponent(Graphics g)
    {  super.paintComponent(g);
       g.drawRect(10,10,100,100);
    }
}

public class Test {
    JPanel jPanel1;
    public static void main(String[] args) {
        new Test();
    }

    public Test() {

        jPanel1 = new JPanel();
        jPanel1.add(new MyComponent());

        JFrame frame = new JFrame("HelloWorldSwing");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

//        frame.getContentPane().add(new MyComponent());
      frame.getContentPane().add(jPanel1);

        frame.setSize(300, 300);
        frame.setVisible(true);
    }
}



Это сообщение отредактировал(а) powerOn - 24.4.2008, 15:40
PM MAIL   Вверх
powerOn
Дата 24.4.2008, 15:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


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

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



Правильно. Какой у вашего компонента размер? 

Код

MyComponent myComponent = new MyComponent();
        System.out.println(myComponent.getPreferredSize());
        myComponent.setPreferredSize(new Dimension(200, 200));
        jPanel1.add(myComponent);




--------------------
user posted image нет времени думать - нужно писать КОД!

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


Шустрый
*


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

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



>Правильно. Какой у вашего компонента размер? 
Точно!

java.AWT.dimention[width=0,height=0]

Вот это да!
Теперь эта штука работает, как часы!
Благодарю powerON!
Power - это наше ВСЁ!!!

Код

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

   class MyComponent extends JComponent
{
    Graphics gg;
    public MyComponent()
    {
        super();

    }
    public void paintComponent(Graphics g)
    {  super.paintComponent(g);
       g.drawRect(10,10,100,100);
    }
}

public class Test {
    JPanel jPanel1;
    public static void main(String[] args) {
        new Test();
    }

    public Test() {

        MyComponent myComponent = new MyComponent();
        System.out.println(myComponent.getPreferredSize());
        myComponent.setPreferredSize(new Dimension(200, 200));

        jPanel1 = new JPanel();
        jPanel1.add( myComponent);

        JFrame frame = new JFrame("HelloWorldSwing");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        frame.getContentPane().add(jPanel1);

        frame.setSize(300, 300);
        frame.setVisible(true);
    }
}




Это сообщение отредактировал(а) powerOn - 24.4.2008, 18:23
PM MAIL   Вверх
Aehn
Дата 24.4.2008, 18:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



А почему тогда не работает более сложная вещь (код отмечен жирным шрифтом)?

Код

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

class MyComponent extends JComponent
{
   public MyComponent()
   {
      super();
      setPreferredSize(new Dimension(200, 200));
   }

   public void paintComonent(Graphics g)
   {
      super.paintComponent(g);
      g.drawRect(10,10,100,100);
   }

}
class NullLayoutTest extends JFrame
{
        public void StartButtonActionPerformed(java.awt.event.ActionEvent evt)
        {
              jTable1.setValueAt("1",0,0);
              jTable1.repaint();
        }

    public NullLayoutTest()
    {

            MyComponent myComponent = new MyComponent();

        getContentPane().setLayout(null);               /* инициализирую Лэйоут */

            JPanel jPanel1 = new javax.swing.JPanel();  /* создаю панель на первую станицу    */
            jPanel1.setLayout(null);
            JPanel jPanel2 = new javax.swing.JPanel();  /* создаю панель на вторую станицу    */
            jPanel2.setLayout(null);
            // it1 = new It(20,20);

            /*------------------------БЛОК ДЛЯ КНОПКИ---------------------------------------+ */
            JButton StartButton = new JButton("Считать");   /* создаю кнопку                | */
            StartButton.setBounds(10, 30, 90, 25);      /* задаю ей координаты и размеры    | */

            StartButton.addActionListener(new java.awt.event.ActionListener() /* внимание!!!| */
            {                                        /* ОПИСЫВАЕМ ОБРАБОТЧИК НАЖАТОЙ КНОПКИ | */
                public void actionPerformed(java.awt.event.ActionEvent evt)
                {   StartButtonActionPerformed(evt);
                    //jTable1.setValueAt("powerON",0,0);
                    //jTable1.repaint();
                    jTextArea1.setText("powerON!!!!!");
                }
            }                                                                );

            jPanel1.add(StartButton);                   /* добавляю к панели                | */
            /*------------------------------------------------------------------------------+ */

            /*-----------------------БЛОК ДЛЯ ОБЛАСТИ ТЕКСТА--------------------------------+ */
                 jTextArea1 = new javax.swing.JTextArea();
                 jTextArea1.setBounds(190,70,160,160);
                 JScrollPane TextAggregate = new JScrollPane(jTextArea1);
                 TextAggregate.setBounds(190,70,160,160);
                 jPanel1.add(TextAggregate);                     /*                         | */
            /*------------------------------------------------------------------------------+ */


            /*-----------------------БЛОК ДЛЯ ТАБЛИЦЫ---------------------------------------+ */
                        jTable1 = new javax.swing.JTable();               /* таблица        | */
                        jTable1.setBounds(10,70,100,160);
                        jTable1.setModel(new javax.swing.table.DefaultTableModel(
                        new Object [100][2] /* { { "0", "0" },{ "1", "1" } }                | */
                                ,
                        new String [] {
                        "Дата1", "Title 2"
                                       }
                                                                                 )
                                        );
                        jTable1.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
                  /*Это        мы создали для прокрутки, поместили туда нашу таблицу        | */
                  JScrollPane tableAggregate = new JScrollPane(jTable1);
                  tableAggregate.setBounds(10,70,170,160);
            jPanel1.add(tableAggregate);                     /* а это    на панель          | */
            /*------------------------------------------------------------------------------+ */

            System.out.println("myComponent " + myComponent.getPreferredSize());
            jPanel2.add(myComponent);
            System.out.println("jPanel2     " + jPanel2.getPreferredSize());
            System.out.println("jPanel1     " + jPanel1.getPreferredSize());

            /*=================================================================================*/
            JTabbedPane jTabbedPane1 = new javax.swing.JTabbedPane();  /*  */
            jTabbedPane1.setBounds(10, 30, 380, 300);                  /* координаты и размеры */


            jTabbedPane1.addTab("Data", jPanel1);        /* инициализирую первый лист и помещаю туда панель с кнопкой */
            jTabbedPane1.addTab("Дата", jPanel2);        /* инициализирую первый лист и помещаю туда панель с кнопкой */
            getContentPane().add(jTabbedPane1);          /* саму же книгу помещаю во фрейм*/

            setBounds(100,100,400,400);                      /* размеры и координаты фрейма */

        //pack();
    }

    public static void main(String[] args)
    {
        NullLayoutTest flt = new NullLayoutTest();
        flt.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
         //flt.setUndecorated(true);
        flt.setVisible(true);
    }
    public javax.swing.JTable jTable1;
    public JTextArea          jTextArea1;
}



 ! 
powerOn
Используйте кнопку КОД для оформления исходников!
Один топик - один вопрос.
Правила форума:http://forum.vingrad.ru/index.php?act=boardrules


Это сообщение отредактировал(а) powerOn - 24.4.2008, 18:32
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.1153 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


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

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