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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> передавать изменение окна с графикой, сокеты, serializable...как? 
:(
    Опции темы
elija
Дата 12.6.2010, 21:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Сразу извиняюсь за некорректное название темы.
Надо сделать так, чтобы можно было передавать новые объекты от клиента к серверу и наоборот. Если звезда вращается у сервера, то передаю данные клиенту, и у него тоже появляется звезда и начинает вращаться. Не знаю, как это реализовать. знаю только, что надо делать через сериализацию, сокеты...А как это сделать - не знаю.
Исходный код, из которого надо это сделать:
Звезды появляются на среднюю кнопку мыши, вращаются на колесико.

Main.java
Код

import java.awt.Button;
import java.awt.Checkbox;
import java.awt.event.*;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.*;

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

public class Main extends JComponent implements Runnable, Serializable // JComponent используется для addMouseListener 
{
     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: ") + Square.squares.size());
                  Square.addItem(f,Square.speed,evt.getPoint().x,evt.getPoint().y,Square.color);
                }
                if ((evt.getModifiers() & InputEvent.BUTTON3_MASK) != 0) 
                {
                  System.out.println("right " + (evt.getPoint()));
                }
         } 
     }
     
    private static final long serialVersionUID = 1L;

    public Thread t;
    Button BtnSave, BtnLoad;
    MouseClick mouse_control;
//    Server MyServer;
//    Client MyClient;
    Thread ServerThread = null;
    Square Star;
    
    
    Main MainFrame;

    class WheelEvent implements MouseWheelListener //создаем класс WheelEvent для "прослушивания" колеса мыши.
    {                                                
//    @Override
            public void mouseWheelMoved(MouseWheelEvent evt) 
            {
            if (evt.getScrollType()==MouseWheelEvent.WHEEL_UNIT_SCROLL);  //MouseWheelEvent - имеет два события при вращении колеса мыши
            if (-1 == evt.getWheelRotation())                            // -1 - вращение вниз и 1 - вращение вверх
            {                                                            //MouseWheelEvent так же 
                Square.speed--;                                                //уменьшаем скорость, если колесо вращается вниз        
                  for (int i = 0; i < Square.squares.size(); i++) 
                  {
                   Square.squares.get(i).angle = Square.speed;
                  }
            }
            else Square.speed++;
              for (int i = 0; i < Square.squares.size(); i++) 
              {
               Square.squares.get(i).angle = Square.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);            //JComponent 
        addMouseWheelListener(mousewheel_control);  //JComponent 
        
        
        BtnSave = new Button("Сохранить");
        BtnSave.setBounds(5, 31, 120, 20);
        BtnSave.addActionListener
            (
                new ActionListener()
                {
                    public void actionPerformed(ActionEvent e)
                    {
                        if (Square.squares != null)
                        {
                            try
                            {
                                ObjectOutputStream out1 = new ObjectOutputStream(new FileOutputStream("ser.dat"));
                                out1.writeObject(Star);
                                out1.close();
                            }
                            catch (IOException e1)
                            {
                                System.out.println("\nОшибка при сохранении.\n");
                            }
                        }
                    }
                }
            );
        add(BtnSave);
        
        BtnLoad = new Button("Загрузить");
        BtnLoad.setBounds(5, 51, 120, 20);
        BtnLoad.addActionListener
            (
                new ActionListener()
                {
                    public void actionPerformed(ActionEvent e)
                    {
                        try
                        {
                            ObjectInputStream in1 = new ObjectInputStream(new FileInputStream("ser.dat"));
                           
                            repaint();
                        }
                        catch (Exception e1)
                        {
                            System.out.println("\nОшибка при загрузке.\n");
                        }
                    }
                }
            );
        add(BtnLoad);

        } 
     public void run()
     {
      try
      {
       while(true)
       {
           Thread.currentThread();
           Thread.sleep(100);
           for (int i = 0; i < Square.squares.size(); i++) 
           {
               Square.squares.get(i).rotateRect();
               Square.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));    
        //    m.setBackground(Color.black);
         f.setLayout(null);
         Square.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);
         }
 }



Square.java
Код

import java.awt.Color;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.geom.*;
import java.io.Serializable;
import java.util.ArrayList;

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

public class Square extends JComponent implements Serializable// наследуем класс от JСomponent
{    
    
    /**
     * 
     */
    private static final long serialVersionUID = -4950318742355216778L;
    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;
    
     }
        public static int color;
        public static int speed;
        public static ArrayList<Square> squares;
        Frame Frm;
         public static 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);
                squares.add(sq);
                frame.add(sq);
            }

            public void setFrm(Frame ff)
            {
                Frm = ff;    
            }
        
     public void paint(Graphics g) //Graphics g используется для рисования. 
     {
      Graphics2D g2=(Graphics2D)g;      //Graphics2D - определяет текущее графическое состояние и методы графического вывода
      g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); 
       Path2D.Double path = new Path2D.Double();
       path.moveTo(width, -42 + height);
       path.lineTo(10 + width, -12 + height);
       path.lineTo(40 + width, -12 + height);
       path.lineTo(16 + width, 6 + height);
       path.lineTo(26 + width, 36 + height);
       path.lineTo(width, 18 + height);
       path.lineTo(-26 + width, 36 + height);
       path.lineTo(-16 + width, 6 + height);
       path.lineTo(-40 + width, -12 + height);
       path.lineTo(-10 + width, -12 + height);
       
       
       /*
       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   Вверх
jk1
Дата 16.6.2010, 11:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Для сериализации компонентов Swing очень удобно использовать XMLEncoder/XMLDecoder, более того
Цитата

Warning: Serialized objects of this class will not be compatible with future Swing releases. The current serialization support is appropriate for short term storage or RMI between applications running the same version of Swing. As of 1.4, support for long term storage of all JavaBeansTM has been added to the java.beans package. Please see java.beans.XMLEncoder.

и это указано в доках практически ко всем компонентам Swing. Таким образом, традиционная сериализация  в этом случае является не очень хорошим решением.
Что касается передачи данных через сокеты, вот тут есть хороший пример на этот счет.


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

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

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


 




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


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

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