Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Swing图形在My Line算法中不起作用?_Java_Algorithm_Swing_Line_Draw - Fatal编程技术网

Java Swing图形在My Line算法中不起作用?

Java Swing图形在My Line算法中不起作用?,java,algorithm,swing,line,draw,Java,Algorithm,Swing,Line,Draw,我正试图利用swing图形来衡量Bresenham的算法和不太完美的解决方案(我还没有实现计时器)。就目前情况而言,编译时没有错误,它在basic、drawthoselines和main中抛出NullPointer异常。其思想是,这些行将出现在JFrame中,但它们不会出现。这只是一个空白框。我知道我已将所有内容设置为静态,但在其他方面我会出现很多错误 我是个新手,如果有人能提供解决方案和解释,我将不胜感激 import java.awt.*; import javax.swing.*; pu

我正试图利用swing图形来衡量Bresenham的算法和不太完美的解决方案(我还没有实现计时器)。就目前情况而言,编译时没有错误,它在basic、drawthoselines和main中抛出NullPointer异常。其思想是,这些行将出现在JFrame中,但它们不会出现。这只是一个空白框。我知道我已将所有内容设置为静态,但在其他方面我会出现很多错误

我是个新手,如果有人能提供解决方案和解释,我将不胜感激

import java.awt.*;
import javax.swing.*;

public class lines extends JPanel {

static int deltaX;
static int deltaY;
static int DY2;
static int DX2;
static int Di;

public static void main (String[] args) {
JFrame f = new JFrame("Line vs Line");
f.pack();
f.setVisible(true);
f.setSize(300,300);
f.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
JPanel p = new JPanel();
f.getContentPane().add(p);
Graphics g = null;
drawthoselines(g);
}

public static void basic(int x1, int y1, int x2, int y2, Graphics g){
int deltaX = x2-x1;
int deltaY = y2-y1;
float m = (float)deltaY/(float)deltaX;
float c = y1 - (m*x1);
for (int x=x1; x<x2; x++){
float floatY = (m*x) + c;
int y = Math.round(floatY);
g.drawLine(x,y,x,y);
}
}

public static void brz(int x1, int y1, int x2, int y2, Graphics g){
deltaX = x2-x1;
deltaY = y2-y1;
DY2 = 2* deltaY;
DX2 = 2* deltaX;
Di = DY2 - deltaX;
int x = x1;
int y = y1;
int prevy;
while (x<x2) {
x++;
prevy = y;
if (Di > 0){
y++;
}
g.drawLine(x,y,x,y);
Di = Di + DY2 - (DX2 * (y - prevy));
}
}

public static void drawthoselines(Graphics g){
basic(10,10,40,30,g);
basic(10,10,40,90,g);
brz(50,50,150,60,g);
brz(50,50,150,120,g);
brz(50,50,150,140,g);
}

}
import java.awt.*;
导入javax.swing.*;
公共类行扩展了JPanel{
静态税收;
静态内特三角洲;
静态int-DY2;
静态int-DX2;
静态int-Di;
公共静态void main(字符串[]args){
JFrame f=新的JFrame(“线对线”);
f、 包装();
f、 setVisible(真);
f、 设置大小(300300);
f、 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel p=新的JPanel();
f、 getContentPane().add(p);
图形g=空;
抽油杆(g);
}
公共静态void basic(int-x1、int-y1、int-x2、int-y2、图形g){
int deltaX=x2-x1;
int deltaY=y2-y1;
浮动m=(浮动)deltaY/(浮动)deltaX;
浮点数c=y1-(m*x1);

对于(int x=x1;x,这不是自定义绘制的方式。请阅读上的Swing教程,以了解绘制工作原理和工作示例


此外,每当您看到所有静态变量和方法时,您就知道自己做错了其他事情。我建议您也花点时间阅读本教程的其他部分,因为它们都包含了一些关于更好地构造代码的示例。

您不会实例化图形,因为它是从java.awt.event传递下来的 此外,还有一个扩展了JPanel的类,这意味着您希望通过实例化该类将该类添加到JFrame中。此外,该类将隐式调用paintComponent方法,您将重写该方法以利用图形g。需要了解的内容很多,所以请慢慢来(从基本示例开始)

我还要告诉你们一些关于静态修饰符的事情。 静态修饰符在加载类时运行。因此,如果不是静态的方法在静态方法中,则需要通过实例化包含该方法的对象来调用该方法。因为需要加载对象(类)才能使用该方法

以下内容应该有效: 导入java.awt。; 导入javax.swing

公共类行扩展了JPanel{
静态税收;
静态内特三角洲;
静态int-DY2;
静态int-DX2;
静态int-Di;
公共静态void main(字符串[]args){
JFrame f=新的JFrame(“线对线”);
f、 包装();
f、 setVisible(真);
f、 设置大小(300300);
f、 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
第h行=新行();
f、 getContentPane().add(h);
}
公共静态void basic(int-x1、int-y1、int-x2、int-y2、图形g){
int deltaX=x2-x1;
int deltaY=y2-y1;
浮动m=(浮动)deltaY/(浮动)deltaX;
浮点数c=y1-(m*x1);

对于(int x=x1;xWell
Graphics g=null;drawthoselines(g);
看起来可能有问题。
从基本示例开始).
-这不是一个好的开始示例。如前所述,本教程将解释正确结构的类的基础知识,这些类不使用静态变量和方法。
public class lines extends JPanel {

static int deltaX;
static int deltaY;
static int DY2;
static int DX2;
static int Di;

public static void main (String[] args) {
JFrame f = new JFrame("Line vs Line");
f.pack();
f.setVisible(true);
f.setSize(300,300);
f.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
lines h = new lines();
f.getContentPane().add(h);

}

public static void basic(int x1, int y1, int x2, int y2, Graphics g){
int deltaX = x2-x1;
int deltaY = y2-y1;
float m = (float)deltaY/(float)deltaX;
float c = y1 - (m*x1);
for (int x=x1; x<x2; x++){
float floatY = (m*x) + c;
int y = Math.round(floatY);
g.drawLine(x,y,x,y);
}
}

public static void brz(int x1, int y1, int x2, int y2, Graphics g){
deltaX = x2-x1;
deltaY = y2-y1;
DY2 = 2* deltaY;
DX2 = 2* deltaX;
Di = DY2 - deltaX;
int x = x1;
int y = y1;  
int prevy;
while (x<x2) {
x++;
prevy = y;
if (Di > 0){
y++;
}
g.drawLine(x,y,x,y);
Di = Di + DY2 - (DX2 * (y - prevy));
}
}

public static void drawthoselines(Graphics g){

}
@Override
protected void paintComponent(Graphics g) {
basic(10,10,40,30,g);
basic(10,10,40,90,g);
brz(50,50,150,60,g);
brz(50,50,150,120,g);
brz(50,50,150,140,g);
}

}