我制作了一个绘画程序,使用套接字将画布中的点传输到所有其他用户画布。当我在不同的屏幕上测试程序时遇到一个问题。在1366x768的笔记本电脑上,一切正常,但从1920x1080的屏幕笔记本电脑来看,它是不连续的。如果我在1920x1080屏幕笔记本电脑上画东西,则在1366x768屏幕上显示平滑,但是当我在1366x768屏幕上画东西时,发生了我说的话。我认为问题不在于连接,因为我试图将服务器同时放在两台笔记本电脑上(而不是同时执行),然后从大一次运行一次,小一次运行一次。与分辨率有关吗?我该如何解决?

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;
}


这是prints。函数,请忽略System.out,因为我使用它们来验证一些东西。

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));
                }


编辑:发生的另一件事是1920x1080画布的下限没有出现。似乎我在该分辨率下有一个小画布,画布从1366x768

最佳答案

好的,我认为您应该进行某种转换:

1.制定标准决议
假设1600 * 900是标准分辨率,那么您必须计算屏幕的比例

2.计算比例因子

标准分辨率= 1600 * 900
用户分辨率= 1366x768
比例=(1600/1366)和(900/768)都等于接近1.171的数字,这就是比例的“因数”

3.现在乘以点
接下来要做的是将点,点的坐标乘以步骤2中的因子。然后发送此信息



您也可以做相反的事情!
也许最好将标准分辨率设置为创建会话的主持人的分辨率

我希望这个答案将给您带来更多的可能性,或者我给您提供了一种新的方法。

10-06 03:20