Новичок
Профиль
Группа: Участник
Сообщений: 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); }
}
|
|