我想在Java中用hline
和vline
绘制矩形。我画了一些问题,我不确切知道,但我认为这是hline1
和vline1
方法。
没有错误,只是参数中的算法存在问题。
这是代码..
package hw1;
import java.awt.*;
import java.awt.geom.*;
import java.awt.event.*;
public class main extends Frame {
Graphics2D g2d;
main()
{
addWindowListener(new hw1.main.MyFinishWindow());
}
public class MyFinishWindow extends WindowAdapter
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
}
public void paint (Graphics g)
{
g2d=(Graphics2D)g;
hline(0,40,250,40);
vline(250,40 , 250 , 80);
hline1(250,80,0,80);
vline1(0,80 , 0 , 40);
}
public void hline(int x1,int y1 , int x2 , int y2)
{
for(int x=x1 ; x<=x2 ; x++)
putpixel(x,y1,Color.blue);
}
public void vline(int x1 ,int y1 , int x2 , int y2 )
{
for(int y=y1;y<=y2;y++)
putpixel(x1,y,Color.blue);
}
public void hline1(int x1,int y1 , int x2 , int y2)
{
for(int x=x1 ; x<=x2 ; x++)
putpixel(x,x1,Color.blue);
}
public void vline1(int x1 ,int y1 , int x2 , int y2 )
{
for(int y=y1;y<=y2;y++)
putpixel(x1,y,Color.blue);
}
public void putpixel(int x , int y , Color c)
{
g2d.setColor(c);
g2d.drawLine(x, y, x, y);
}
public void putpixel(int x , int y , Color c , int rad)
{
g2d.setColor(c);
if(rad>4) rad=4;
if(rad<=0) rad=1;
g2d.drawOval(x-rad/2, y-rad/2, rad, rad);
}
public static void main(String[] args) {
// TODO code application logic here
main f=new main();
f.setTitle("Computer Graphics:Java 2D prpgram");
Dimension screenSize=
Toolkit.getDefaultToolkit().getScreenSize();
int width=(int) screenSize.getWidth();
int height=(int) screenSize.getHeight();
f.setSize(width, height);
f.setVisible(true);
}
}
答案 0 :(得分:2)
主要问题是你总是增加循环变量 - 不考虑哪个边界值大于另一个......
vline1(0,80 , 0 , 40);
这将从80开始,并且递增直到它达到40 ......
这至少应该做什么
public void vline(int x1 ,int y1 , int x2 , int y2 )
{
//use min and max
for(int y=Math.min(y1, y2);y<=Math.max(y1,y2);y++) { //always use brackets!!!
putpixel(x1,y,Color.blue);
}
}
,一定要为hline()实现这个......
您不应该在方法中使用任何未使用的参数。
hline(y, x1, x2)
vline(x, y1, y2)
就足够了。
更不用说,把它提升到一个新的水平:对于所有类型的行都有一个方法会很棒:那就是drawLine()
,因为 @ ling.s < / strong>指出。并且正确处理各种线路......
故事的道德:了解你的API,不要重新发明轮子(除非这是为了学校,其任务是重新发明它......)
答案 1 :(得分:1)
尝试drawLine()
public void paint (Graphics g)
{
g2d=(Graphics2D)g;
g.drawLine(0,40,250,40);
g.drawLine(250,40 , 250 , 80);
g.drawLine(250,80,0,80);
g.drawLine(0,80 , 0 , 40);
}
答案 2 :(得分:0)
作为旁注,您可以使用java.awt.Polygon
。
Polygon p;
p = new Polygon();
p.addPoint(10, 10);
p.addPoint(100,10);
p.addPoint(100,100);
p.addPoint(10,100);
.....
public void paintComponent(Graphics g){
super.paintComponent(g);
setBackground(Color.white);
g.fillPolygon(p);
}