【发布时间】:2013-03-09 20:51:00
【问题描述】:
我正在尝试通过存储它需要绘制的线条来制作一个填充桶工具。我的那部分工作得很好,但是现在当我尝试缩放它时,我遇到了一个问题,即我有一些区域没有画在某些线条之间。有什么办法可以解决这个问题,或者有更好的办法吗?
这段代码将演示我遇到的问题。第一个正方形没有缩放,看起来不错,但是当我缩放第二个框时,一些线之间有空间。
import java.awt.*;
import javax.swing.*;
public class LineWidth extends JPanel{
public static void main(String[] args) {
LineWidth l = new LineWidth();
l.setPreferredSize(new Dimension(500, 500));
l.setBackground(Color.CYAN);
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setContentPane(l);
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g.create();
g2.setColor(Color.BLACK);
for(int i=10; i<110; i++) {
g2.drawLine(10, i, 190, i);
}
Graphics2D g22 = (Graphics2D) g.create();
g22.setColor(Color.BLACK);
g22.scale(2.1, 2.1);
for(int i=120; i<220; i++) {
g22.drawLine(10, i, 190, i);
}
}
}
对于这个例子来说,绘制一个矩形而不是线条会容易得多,但是对于我的填充桶,我没有看到这样做的方法。
谢谢。
【问题讨论】:
-
尝试使用仿射变换
-
@MadProgrammer 我现在正在尝试,但我不确定该怎么做。我在做 transform.scale(2.1, 2.1);我得到了同样的结果,这是我所预料的。我应该尝试改变它的哪一部分?
-
你能用
Graphics2D.fill(Shape shape);代替画线吗? docs.oracle.com/javase/1.4.2/docs/api/java/awt/… -
@martini 我对形状不太熟悉,所以我不确定。如果我能把我的线条列表变成一个形状,我相信它会很好用。我会调查一下。有什么好的起点吗?
-
@maptwo3 你需要一个多边形 :) docs.oracle.com/javase/1.4.2/docs/api/java/awt/Polygon.html
标签: java scale graphics2d lines rect