【问题标题】:How to draw in a panel in Java - not Jpanel如何在 Java 中绘制面板 - 而不是 Jpanel
【发布时间】:2014-08-20 14:59:22
【问题描述】:

我真的是 Java 新手,正在做一个类项目 - 我需要在面板中绘制一些像素。我得到了面板的 jar 代码,现在我需要制作不同的轨迹 - 具体来说,我需要创建围绕面板周边的像素轨迹,并且我需要创建一些圆圈。

关于盒子 - 我已经完成了其中的一部分工作。我的像素从左上角开始,一直到右上角,从面板的右侧向下,然后有点疯狂——我不确定它是停在右下角还是低于面板本身的边界,但它没有完成围绕周边的行程。我的代码是:

    import cs251.lab1.Display;

    public class Visualizer {

    private static final int PIXEL_SIZE = 50;

    public static void main(String[] args) {
    Display panel = new Display(10, PIXEL_SIZE);
    drawWrappingDots(panel);}
    public static void drawWrappingDots(Display panel) {
        int x = 1;
        int y = 1;
        while (x > 0 && y > 0){
        if (x < panel.getWidth()){
            panel.drawNextPixel(x, y);
            x++;
        }
        if (x == panel.getWidth()){
            panel.drawNextPixel(x, y);
            y++;
        }
        if (x > 0 && y == panel.getHeight()){
            panel.drawNextPixel(x, y);
            x--;
        }
        if (x == 0 && y == panel.getHeight()){
            panel.drawNextPixel(x, y);
            y--;
        }

我做错了什么?

第二,如何画一个圆?我知道它需要使用数学库,但我不知道该怎么做。非常感谢您对此的任何帮助。谢谢。

【问题讨论】:

  • 在做y++的时候不应该把x重置为0吗?差不多吧。

标签: java panel


【解决方案1】:

至于第一个问题,你可以使用多个 if 语句:

int x = 1; //x starts a little to the right of 0
int y = 0; //y starts at 0
while (x > 0 && y > 0){
    if (x < panel.getWidth() && y == 0){
        panel.drawNextPixel(x, y);
        x++;
    }
    else if (x == panel.getWidth() && y != panel.getHeight()){
        panel.drawNextPixel(x, y);
        y++;
    }
    else if (x > 0 && y == panel.getHeight()){
        panel.drawNextPixel(x, y);
        x--;
    }
    else {
        panel.drawNextPixel(x, y);
        y--;
    }
}

这样,在决定要绘制像素的方式时,您可以同时检查 x 和 y 坐标。它从 x=1 和 y=0 开始,然后向右移动直到 x 到达边界,然后向下移动直到 y 到达边界,然后向左移动直到 x 到达 0,最后向上移动直到 y 到达 0 和 while条件变为假。

至于圆,需要用到三角函数。在面板中间指定一个点来绘制圆。然后为圆指定你想要的半径。

int middle = 50;
int radius = 20;

然后,你使用三角函数:

int deg = 0;
while ( deg <= 360 ) {
  x = middle + (int)(Math.cos(deg)*radius);
  y = middle + (int)(Math.sin(deg)*radius);
  panel.drawNextPixel(x, y);
  deg++;
}

应该可以的。

【讨论】:

    【解决方案2】:

    while 循环更改为:

    while (x > 0 && y > 0){
        if (x < panel.getWidth()){
            panel.drawNextPixel(x, y);
            x++;
        }
        if (x == panel.getWidth() && y != panel.getHeight()){
            panel.drawNextPixel(x, y);
            y++;
        }
        if (x > 1 && y == panel.getHeight()){
            panel.drawNextPixel(x, y);
            x--;
        }
        if (x == 1 && y > 0){
            panel.drawNextPixel(x, y);
            y--;
        }
    

    也许,这不是完美的解决方案。

    【讨论】:

      猜你喜欢
      • 2012-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-14
      • 2013-02-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多