【发布时间】:2020-07-15 18:26:29
【问题描述】:
我无法画出所有线条。当我运行此代码时,仅绘制了 4 条线中的 3 条。如果我只有 3 次构造函数调用来绘制线条,则只绘制 2 条线。有人可以帮我解决这个问题吗?
JFrame frame = new JFrame();
frame.setSize(500, 500);
JPanel pane = new JPanel();
pane.setLayout(new BorderLayout());
pane.add(new JComponent() {
public void paint(Graphics g) {
new Lines(120, 30, 200, 30).paint(g, this);
new Lines(120, 60, 120, 30).paint(g, this);
new Lines(200, 60, 200, 30).paint(g, this);
new Lines(120, 60, 200, 30).paint(g, this);
}
});
frame.add(pane);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
顺便说一句,这是我的 Lines 类,有人可以帮我为什么只画某些线条以及如何解决这个问题:
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.awt.image.ImageObserver;
import java.util.Scanner;
import java.util.Random;
import java.util.concurrent.TimeUnit;
public class Lines {
//variables
static int x0, x1, y0, y1, x, y, n;
static double dx, dy, m, b;
static int uslope = 0;
public Lines(int a, int b, int c, int d) {
x0 = a;
y0 = b;
x1 = c;
y1 = d;
}
public void paint(Graphics g, ImageObserver observer) {
//finding the variables for linear function (non vertical line)
if ((x1 - x0) != 0 || (x0 - x1) != 0) {
dx = x1 - x0;
dy = y1 - y0;
m = dy / dx;
b = y0 - (m * x0);
} else {
//in case a vertical line
uslope = 1;
}
//line thickness and pixels
Color black = new Color(0, 0, 0);
int rgb = black.getRGB();
BufferedImage img = new BufferedImage(2, 2, BufferedImage.TYPE_INT_RGB);
img.setRGB(1, 1, rgb);
/*
* Each case depends on the value of m and if the value of the starting x or y coordinate is greater than the ending x or y coordinate
*/
//vertical line drawing to higher y value (y0 < y1)
if ((uslope == 1) && (y0 < y1)) {
for (int i = y0; i <= y1; i++) {
x = x0;
y = i;
g.drawImage(img, x, y, observer);
}
}
//vertical line drawing from higher y value (y0 > y1)
else if ((uslope == 1) && (y1 < y0)) {
for (int i = y0; i >= y1; i--) {
x = x0;
y = i;
g.drawImage(img, x, y, observer);
}
}
//horizontal line drawing to higher x value (x0 < x1)
else if ((m == 0) && (x0 < x1)) {
for (int i = x0; i <= x1; i++) {
x = i;
y = y0;
g.drawImage(img, x, y, observer);
}
}
//horizontal line drawing from higher x value (x0 > x1)
else if ((m == 0) && (x1 < x0)) {
for (int i = x0; i >= x1; i--) {
x = i;
y = y0;
g.drawImage(img, x, y, observer);
}
}
//positive m-slope line drawing to higher x value (x1 > x0)
else if ((m > 0) && (x0 < x1)) {
for (int i = x0; i <= x1; i++) {
x = i;
y = (int) ((m * x) + b);
g.drawImage(img, x, y, observer);
}
}
//positive m-slope line drawing from higher x value (x0 > x1)
else if ((m > 0) && (x1 < x0)) {
for (int i = x0; i >= x1; i--) {
x = i;
y = (int) ((m * x) + b);
g.drawImage(img, x, y, observer);
}
}
//negative m-slope line drawing to higher x value (x1 > x0)
else if ((m < 0) && (x0 < x1)) {
for (int i = x0; i <= x1; i++) {
x = i;
y = (int) ((m * x) + b);
g.drawImage(img, x, y, observer);
}
}
//negative m-slope line drawing from higher x value (x0 > x1)
else if ((m < 0) && (x1 < x0)) {
for (int i = x0; i >= x1; i--) {
x = i;
y = (int) ((m * x) + b);
g.drawImage(img, x, y, observer);
}
} else
System.out.println("error");
}
}
【问题讨论】:
-
如果您想绘制简单的线条,请使用 Graphisc2D.drawLine。如果问题更复杂,我认为,错误在于这个奇怪的计算 - 'y = (int) ((m * x) + b);'。但是很难理解你到底想要什么。
-
我必须使用该类逐个像素地绘制线条。我必须使用该类绘制多条线。
标签: java swing user-interface jframe jcomponent