Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Проблема с созданием на форме элемента управления  (Прочитано 6393 раз)
0 Пользователей и 1 Гость смотрят эту тему.
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« : 19-05-2006 08:03 » 

Дело в том, что элементы управления которые я создаю в классе Hello_World унаследованного от Applet, в методе init() появляются. А вот элемент управления который я создаю в классе NewThread не создаются (или не появляются). Также, если я не ошибаюсь, (проверить счейчас не могу) не появляется элемент управления, если я его создаю в классе Hello_World, но не в методе init(), а в каком либо другом. Вопрос? Что надо сделать, чтобы элемент управления отображался вне зависимости от того, где я его создаю
Вот код, навсякий случай кидаю весь
Код:
import java.applet.*;
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.Graphics;




public class Hello_World extends Applet implements MouseListener
{
 private boolean StartThread;
 private Font font;
 private int X, Y;
 private StringBuffer my_comment;
 private StringBuffer EventString;
 private int button, clickCount;
 private NewThread thThread1, thThread2;
public Label static_Label, dynamic_Label;
public Button sLabel, dLabel;


  public void init()
  {
    StartThread=false;
    button=0; clickCount=0;
    my_comment=new StringBuffer("");
    EventString=new StringBuffer("");
     X=0; Y=0;
    addMouseListener(this);

static_Label= new Label("Thread");
          dynamic_Label= new Label("0");
          add(static_Label);
          add(dynamic_Label);
             sLabel=new Button("sLabel");
          dLabel=new Button("dLabel");
          add(sLabel);
          add(dLabel);
  }

  public void paint(Graphics g)
  {
     
   
        ///--------------------myButton :)
                          if(StartThread==false)
                          {
                            g.setColor(Color.RED);
                          }
                          else
                          {
                            g.setColor(Color.BLUE);
                          }
                          font=new Font("Times New Roman",Font.ITALIC,20);
                          g.setFont(font);
                          g.fill3DRect(10,400,60,40,true);
                          if(StartThread==false)
                          {
                            g.setColor(Color.BLACK);
                            g.drawString("Start", 20, 420);
                          }
                          else
                          {
                            g.setColor(Color.RED);
                            g.drawString("Stop", 20, 420);
                          }
      ///--------------------------------
    //The pink oval
     Color myColor=new Color(10,20,210);
     font = new Font("Arial",Font.ITALIC, 48);
     g.setColor(myColor);
     g.fillOval(10,210,350,100);
     g.setColor(Color.yellow);
     g.setFont(font);
     g.drawString("Hello World!!!",40,275);
   //////////////////////////
                    //Pole information MouseEvent
                    myColor=new Color(0xA2,0xA2,0xA2);
                    g.setColor(myColor);
                    g.fill3DRect(10,10,900,150,false);

                    font=new Font("Times New Roman", Font.TRUETYPE_FONT,20);
                    g.setFont(font);
                    g.setColor(Color.BLACK);
                    g.drawString("X="+X,10,30);
                    g.drawString("Y="+Y,10,60);
                    g.drawLine(10,70,700,70);
                    g.drawString(""+my_comment,10,100);
                    g.drawLine(10,110,700,110);
                    g.drawString(""+EventString,10,140);

                                      ////////////ЭКстра параметра
                                      g.drawLine(70, 10, 70, 70);
                                      g.drawLine(220, 10, 220, 110);
                                      g.setColor(Color.LIGHT_GRAY);
                                      g.drawString("button=" + button, 100, 30);
                                      g.drawString("clickCount=" + clickCount, 100, 60);



  }

  public void update(Graphics g)
  {
 
    ///////////--------MyButton :)
                         if(!StartThread)
                         {
                           g.setColor(Color.RED);
                         }
                         else
                         {
                           g.setColor(Color.BLUE);
                         }
                         font=new Font("Times New Roman",Font.ITALIC,20);
                         g.setFont(font);
                         g.fill3DRect(10,400,60,40,true);
                         if(!StartThread)
                         {
                           g.setColor(Color.BLACK);
                           g.drawString("Start", 20, 420);
                         }
                         else
                         {
                           g.setColor(Color.RED);
                           g.drawString("Stop", 20, 420);
                         }
//-----------------------------
        //The pink oval
        Color myColor=new Color(10,20,210);
        font = new Font("Arial",Font.ITALIC, 48);
        g.setColor(myColor);
        g.fillOval(10,210,350,100);
        g.setColor(Color.yellow);
        g.setFont(font);
        g.drawString("Hello World!!!",40,275);

    //////////////////////////
                        //Pole information MouseEvent
                        myColor=new Color(0xA2,0xA2,0xA2);
                        g.setColor(myColor);
                        g.fill3DRect(10,10,900,150,false);
                        font=new Font("Times New Roman", Font.TRUETYPE_FONT,20);
                        g.setFont(font);
                        g.setColor(Color.BLACK);
                        g.drawString("X="+X,10,30);
                        g.drawString("Y="+Y,10,60);
                        g.drawLine(10,70,700,70);
                        g.drawString(""+my_comment,10,100);
                        g.drawLine(10,110,700,110);
                        g.drawString(""+EventString,10,140);

                        ////////////ЭКстра параметра
                             g.drawLine(70, 10, 70, 70);
                             g.drawLine(220, 10, 220, 110);
                             g.setColor(Color.LIGHT_GRAY);
                             g.drawString("button=" + button, 100, 30);
                             g.drawString("clickCount=" + clickCount, 100, 60);

  }

  public void mouseExited(MouseEvent Event)
  {
    my_comment=new StringBuffer("I don't see cursor!!!");
    repaint(10,0,200,180);
  }
  public void mouseEntered(MouseEvent Event)
  {
   my_comment=new StringBuffer("I see cursor!!!");
   repaint(00,10,200,180);
  }
  public void mousePressed(MouseEvent Event)
  {
    X=Event.getX();
    Y=Event.getY();
   my_comment=new StringBuffer("I see cursor!!!");
   EventString=new StringBuffer(Event.paramString());
   repaint(0,0,1000,180);
  }
  public void mouseClicked(MouseEvent Event)
  {
     button=Event.getButton();
     clickCount=Event.getClickCount();
     repaint(10,10,1000,180);
  }
  public void mouseReleased(MouseEvent Event)
  {
    int x=Event.getX(), y=Event.getY();


    if((x>10 && x<70) && (y>400 && y<440 ))
    {
      StartThread = (!StartThread);
     

                    if(StartThread)
                    {
                   
                     thThread1 =  new NewThread("Thread1",300,400,0,static_Label);
                     thThread1.StartThread();
                     thThread2= new NewThread("Thread2",400,400,0,dynamic_Label);
                     thThread2.StartThread();
                 
                    }
                    else
                    {
                     thThread1.stop();
                     thThread1.stop();
                    }
repaint(10, 0, 560, 540);
    }
  }
  ////////////////////////////
}

//------------------------------------------------------
class NewThread extends Hello_World implements Runnable
{
private Thread thThread;
private String sNameThread;
private int x, y;
private int Count;
private volatile boolean running;
private Label _label;
private Label temp;

         NewThread()
         {
          x=0; y=0; Count=0; sNameThread=new String("Thread");
          thThread=new Thread(this);
          Count=0;
         
        }
         NewThread(String name, int x, int y, int begin_count, Label label)
         {
           sNameThread=new String(name);
           this.x=x;
           this.y=y;
           Count=begin_count;
           thThread= new Thread(this,sNameThread);
           _label=label;
           temp=new Label("Temp");
           add(temp);
        }

                      public  void StartThread()
                      {
                        running=true;
                        thThread.start();
                      }

                      public void run()
                      {
                        while(running)
                        {
                          Count++;
                          String str=new String(" "+Count);
                          _label.setText(str);
                          //wait(100);                         
                        }
                      }
                      public void stop()
                      {
                       running = false;
                      }
}

Не отображается элемент управления - объект класса Label temp. Остальные отображаются нормально.
« Последнее редактирование: 14-12-2007 23:27 от Алексей1153++ » Записан

ещё один вопрос ...
Nazica
Гость
« Ответ #1 : 08-06-2006 22:26 » 

     Зачем ты сделал наследование "class NewThread extends Hello_World"? Это же по смыслу поток, а не окно. В принципе, здесь-то и находится проблема! Дело в том, что ты в методе "add(temp)" добавляешь метку не в контейнер объекта класса Hello_World, как хотел, а в объект класса NewThread, который запускается, но никак не отображается! Другими словами, эта метка никак не сможет отобразиться в Hello_World, т.к. ее там просто не существует.
     Необходимо конструктор NewThread переписать так:
Код:
private Applet app;

NewThread(Applet app,String name, int x, int y, int begin_count, Label label) {
            <твоя инициализация>
           
            this.app.add(temp);
            this.app.validate();
        }
     Как видно, здесь передается объект класса Applet в NewThread. После этого К ОБЪЕКТУ app добавляется метка и происходит перерисовка методом validate();
P.S. Пиши все-таки на Свинге, а не на АВТ - говорят шустрее работает (хотя СВТ еще быстрее Ага ) и возможностей поболее!
Записан
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 09-06-2006 02:47 » 

Cпасибо.
Записан

ещё один вопрос ...
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines