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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> не может обработаться метод в mouseClicked 
V
    Опции темы
elija
Дата 28.5.2010, 21:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



возникла новая проблема...пытаюсь добавить в
Код

 public void mouseClicked(MouseEvent evt)
   метод рисование звезды по клику мыши...но в 15 строчке 
Код

addItem(f,1,evt.getPoint().x,evt.getPoint().y); 

f подчеркивается...
Код

import java.awt.event.*;
import java.util.*;

import javax.swing.JComponent;
import javax.swing.JFrame;

public class Main extends JComponent implements Runnable
{
     private class MouseClick extends MouseAdapter 
     {
         public void mouseClicked(MouseEvent evt) 
         {
                if ((evt.getModifiers() & InputEvent.BUTTON1_MASK) != 0) {
                  System.out.println("left " + (evt.getPoint()));    
                addItem(f,1,evt.getPoint().x,evt.getPoint().y);   //вот тут и не работает...
                }
                if ((evt.getModifiers() & InputEvent.BUTTON2_MASK) != 0) {
                  System.out.println("middle " + (evt.getPoint()));
                }
                if ((evt.getModifiers() & InputEvent.BUTTON3_MASK) != 0) {
                  System.out.println("right " + (evt.getPoint()));
                }
         } 
     }
 
    private static final long serialVersionUID = 1L;
    public ArrayList<Square> squares;
    public Thread t;
    MouseClick mouse_control;
 Main()
    {
        new Thread(this).start();
        mouse_control = new MouseClick();
        addMouseListener(mouse_control);
    } 
    public void addItem(JFrame frame, double d, int width, int height) 
    {
        Square sq = new Square(d,width, height);
        sq.setBounds(0, 0, 1024, 1000);
        this.squares.add(sq);
        frame.add(sq);
    }
     public void run()
     {
      try
      {
       while(true)
       {
           Thread.currentThread();
           Thread.sleep(10);
           for (int i = 0; i < squares.size(); i++) 
           {
               squares.get(i).rotateRect();
               squares.get(i).repaint();
           }
       }
      }
      catch(Exception ex){}
     }
 
     public static void main(String [] args)
     {
    
         Main m = new Main();
         m.setBorder(javax.swing.BorderFactory.createLineBorder(java.awt.Color.BLACK));
         m.setSize(new java.awt.Dimension(600, 600));     
      JFrame f=new JFrame("STARS");
      
      f.setLayout(null);

      m.squares = new ArrayList<Square>();
      
      m.addItem(f, -0.5, 30, 30);
      m.addItem(f, 3, 220, 30);
      m.addItem(f, 10, 220, 230);
      m.addItem(f, 60, 151, 351);      
     f.add(m);

     f.setSize(400, 400);
     f.setResizable(false);
     f.setVisible(true);
      f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      m.run();
      
     }
}



Код

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.Shape;
import java.awt.geom.*;
import javax.swing.JComponent;

public class Square extends JComponent//  implements Runnable
{
     AffineTransform at = new AffineTransform();
     double angle=0;
     int width=0, height=0;
     
        public Shape shape;
        public Color color;
       
     
     Square(double angle, int width, int height)
     {
      this.angle=angle;
      this.width=width;
      this.height=height;
     }
     
     public void paint(Graphics g)
     {
      Graphics2D g2=(Graphics2D)g;
      g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); 
       //Rectangle rect=new Rectangle(20, 20, width, height);
       
       Path2D.Double path = new Path2D.Double();
       path.moveTo(22 + width, 1 + height);
       path.lineTo(27 + width, 16 + height);
       path.lineTo(42 + width, 16 + height);
       path.lineTo(30 + width, 25 + height);
       path.lineTo(35 + width, 40 + height);
       path.lineTo(22 + width, 31 + height);
       path.lineTo(9 + width, 40 + height);
       path.lineTo(14 + width, 25 + height);
       path.lineTo(2 + width, 16 + height);
       path.lineTo(17 + width, 16 + height);
       
       path.closePath();
   
       path.transform(at);
       
     // g2.transform(at);
      //g2.draw(rect);
      g2.setColor(Color.RED);
      g2.fill(path);
      g2.draw(path);
     }
     

     
     public void rotateRect()
     {
          at.rotate(Math.toRadians(angle), 22 + width, 22 + height);
     }
}


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


Опытный
**


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

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



Цитата(elija @  28.5.2010,  21:36 Найти цитируемый пост)
f подчеркивается...

А с какого это перепугу в mouseClicked(MouseEvent) ты используешь эту переменную? Она у тебя объявлена внутри метода main.
PM   Вверх
elija
Дата 29.5.2010, 10:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



а как еще это сделать, чтобы сработало?...я не очень хорошо понимаю...

все! разобрался.
Код

public static JFrame f=new JFrame("STARS");

вынес из мейна

Это сообщение отредактировал(а) elija - 29.5.2010, 11:14
PM MAIL   Вверх
aleksandy
Дата 30.5.2010, 20:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Правильнее было бы сделать 
Код
public void mouseClicked(MouseEvent evt) {
  JFrame f = (JFrame)SwingUtilities.getWindowAncestor((Main)evt.getSource());
  // далее твой код...
}

И не надо делать никаких статических полей.
PM   Вверх
elija
Дата 31.5.2010, 19:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



немного переписал программу. возникла необходимость в понятном объяснении ее работы и комментировании. особенно пояснение по потокам...с ними у меня большие проблемы( и если не трудно, то и по Афинным преобразованиям...именно на примере моей программы...



Main.java
Код

import java.awt.event.*;
import java.util.*;

import javax.swing.JComponent;
import javax.swing.JFrame;

public class Main extends JComponent implements Runnable
{
     private class MouseClick extends MouseAdapter 
     {
          @Override
         public void mousePressed(MouseEvent evt) 
         {
                  if ((evt.getModifiers() & InputEvent.BUTTON1_MASK) != 0)
                  {
                  System.out.println("left " + (evt.getPoint()));  
                  }
                if ((evt.getModifiers() & InputEvent.BUTTON2_MASK) != 0)
                {
                  System.out.println(("STARS count: ") + squares.size());
                  addItem(f,speed,evt.getPoint().x,evt.getPoint().y,color);
                }
                if ((evt.getModifiers() & InputEvent.BUTTON3_MASK) != 0) 
                {
                  System.out.println("right " + (evt.getPoint()));
                }
         } 
     }
     
    private static final long serialVersionUID = 1L;
    public ArrayList<Square> squares;
    public Thread t;
    MouseClick mouse_control;

    class WheelEvent implements MouseWheelListener
    {
        @Override
            public void mouseWheelMoved(MouseWheelEvent evt) 
            {
            if (evt.getScrollType()==MouseWheelEvent.WHEEL_UNIT_SCROLL);
            if (-1 == evt.getWheelRotation())
            {
                speed--;
                  for (int i = 0; i < squares.size(); i++) 
                  {
                   squares.get(i).angle = speed;
                  }
            }
            else speed++;
              for (int i = 0; i < squares.size(); i++) 
              {
               squares.get(i).angle = speed;
              }
        }
    }
    public static int color;
    public static int speed;
    WheelEvent mousewheel_control;
 Main()
        {
        t = new Thread(this);//создаем поток
        System.out.println("поток создан");
        t.start(); //запускаем
        System.out.println("поток запущен");
        mouse_control = new MouseClick();
        mousewheel_control = new WheelEvent();
        addMouseListener(mouse_control);
        addMouseWheelListener(mousewheel_control);
        } 
 public void addItem(JFrame frame, int d, int width, int height, int color) 
    {
        Square sq = new Square(d,width, height);
        sq.setBounds(0, 0, 1024, 1000);
        this.squares.add(sq);
        frame.add(sq);
    }
     public void run()
     {
      try
      {
       while(true)
       {
           Thread.currentThread();
           Thread.sleep(100);
           for (int i = 0; i < squares.size(); i++) 
           {
               squares.get(i).rotateRect();
               squares.get(i).repaint();
           }
       }
      }
      catch(Exception ex){}
     }
     public static JFrame f=new JFrame("STARS");     
         public static void main(String [] args)
         {
            Main m = new Main();
            m.setBorder(javax.swing.BorderFactory.createLineBorder(java.awt.Color.BLACK));
            m.setSize(new java.awt.Dimension(600, 600));     
         f.setLayout(null);
         m.squares = new ArrayList<Square>();
         f.add(m);
         f.setSize(400, 400);
         f.setResizable(false);
         f.setVisible(true);
         f.getContentPane().add(m);
         f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
         }
 }





Squares.java
Код

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.geom.*;
import javax.swing.JComponent;

public class Square extends JComponent // наследуем класс от Jcomponent
{    private static final long serialVersionUID = -8618517245604973460L;
    
    AffineTransform at = new AffineTransform();
     int angle=0;
     int width=0, height=0;
     Square(int angle, int width, int height)
     {
      this.angle=angle;
      this.width=width;
      this.height=height;
    
     }
                 @Override
     public void paint(Graphics g) //Graphics g используется для рисования. 
     {
      Graphics2D g2=(Graphics2D)g;      
      g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); 
       Path2D.Double path = new Path2D.Double();

       path.moveTo(width, -21 + height);
       path.lineTo(5 + width, -6 + height);
       path.lineTo(20 + width, -6 + height);
       path.lineTo(8 + width, 3 + height);
       path.lineTo(13 + width, 18 + height);
       path.lineTo(width, 9 + height);
       path.lineTo(-13 + width, 18 + height);
       path.lineTo(-8 + width, 3 + height);
       path.lineTo(-20 + width, -6 + height);
       path.lineTo(-5 + width, -6 + height);
       path.closePath();
       path.transform(at);
       g2.setColor(Color.RED);
       g2.draw(path);
       g2.fill(path);
        }
     public void rotateRect()
     {
          at.rotate(Math.toRadians(angle), width, height);
    }

}


буду очень благодарен за помощь!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.0451 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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