2016-08-09 73 views
2

Ich habe ein Malprogramm mit Sockets gemacht, um Punkte von einer Leinwand an alle anderen Benutzer canvas.Wenn ich mein Programm auf verschiedenen Bildschirmen getestet habe ich auf ein Problem gestoßen.Auf meinem Laptop 1366x768 geht alles gut, aber von a 1920x1080 Bildschirm Laptop geht diskontinuierlich.Wenn ich etwas auf dem 1920x1080 Bildschirm Laptop zeichnen zeigt es glatt auf meinem 1366x768 Bildschirm, aber wenn ich etwas auf dem 1366x768 zeichnen passiert es, was ich sage.Ich denke, das Problem ist nicht mit der Verbindung, weil ich versucht habe Stellen Sie den Server auf beide Laptops (nicht gleichzeitig) und laufen Sie einmal von der großen und einmal von der kleinen. Es hat mit der Auflösung zu tun? Wie kann ich das beheben?Java Socket Paint Programm

public void mousePressed(MouseEvent e) { 
    x=e.getX(); 
    y=e.getY(); 
} 

public void mouseDragged(MouseEvent e) { 
    x1=e.getX(); 
    y1=e.getY(); 
    gr=canvas.getGraphics(); 
    gr.drawLine(x, y, x1, y1); 
    if(x!=x1||y!=y1) 
    { 
     try { 
     PrintStream ps=new PrintStream(sc.getOutputStream()); 
     ps.println("!!##print"+" "+x+" "+" "+y+" "+x1+" "+y1); 
    } catch (IOException e1) { 

     e1.printStackTrace(); 
    } 
    } 
    x=x1; 
    y=y1; 
} 

Hier ist die Funktion, die druckt.Ignorieren Sie die System.out, weil ich sie verwendet, um einige Dinge zu überprüfen.

else if(mes.charAt(0)=='!'&&mes.charAt(1)=='!'&&mes.charAt(2)=='#'&&mes.charAt(3)=='#'&& 
         mes.charAt(4)=='p'&&mes.charAt(5)=='r'&&mes.charAt(6)=='i'&&mes.charAt(7)=='n'&& 
         mes.charAt(8)=='t' 
         ) 
       { 
        System.out.println("am intrat la desenat"); 
        StringTokenizer tok=new StringTokenizer(mes); 
        String aii=tok.nextToken(); 
        ArrayList<Integer> numere=new ArrayList<Integer>(); 
        for(int i=0;i<4;i++) 
        { 
         numere.add(Integer.parseInt(tok.nextToken())); 
        } 
        Graphics gs=canvas.getGraphics(); 
        gs.drawLine(numere.get(0), numere.get(1), numere.get(2), numere.get(3)); 
       } 

EDIT: Eine andere Sache, die von der Leinwand auf 1920x1080 ist, dass der untere nicht appear.It scheint gebunden geschieht, wie ich auf dieser Auflösung eine kleine Leinwand haben, dass die Leinwand von 1366x768

+0

Können Sie einen Code angeben, wo Sie die Punkte senden und empfangen und wie Sie sie zeichnen? –

+0

Wenn Sie etwas anderes sagen wollen, und ich werde es setzen – User124235

+0

ist es nicht von der Auflösung ist es von der Vernetzung – User124235

Antwort

1

Ok I denke, Sie sollten eine Art von Transformation machen:

1. Erstellen Sie eine Standardauflösung des 1600 * 900 sagen Lassen Sie die Standardauflösung, dann müssen Sie die Skala der Bildschirme berechnen

2. berechnet ein Skalierungsfaktor
Standard-res = 1600 * 900
Benutzer res = 1366x768
Skala = (1600/1366) und (900/768) beide gleich eine Reihe der Nähe von 1.171, so dass Du Skala „Faktor“ multiplizieren

3. jetzt die Punkte Das nächste, was Sie die Punkte multiplizieren tun müssen, ist, von dem Schritt der Punkte mit dem Faktor-Koordinaten 2. Und dann


diese Informationen senden

Sie können auch das Gegenteil tun! Vielleicht ist es besser, die Standardauflösung der Auflösung des Hosts, der die Sitzung erstellt hat

Ich hoffe, diese Antwort wird Ihnen eine zusätzliche Möglichkeit, oder dass ich Ihnen eine neue Art der Annäherung gab.

+0

sind Sie sicher, es ist von der Auflösung und nicht von der Verzögerung in der Vernetzung? Ich frage dies, weil ich nicht herausfinden kann .. – User124235

+0

es ist nicht von resolution.i denke, es ist von networking.wenn ich 4 oder mehr sogar auf dem gleichen pc verbinden ich bekomme diskontinuierliche linien.aber danke trotzdem für ihren rat – User124235