好吧,首先我知道如何用g.drawRect或g.drawOval绘制矩形和圆等,但没有g.drawtriangle,所以你们可以告诉我是否有方法绘制出三角形我不得不把它画出三角形的每一边。如何在java中绘制三角形?
2
A
回答
9
您可以使用Graphics.drawPolygon(int[], int[], int)
,其中第一INT []是一组x值,第二个INT []是一组y值,而int是长度的阵列。 (在一个三角形的情况下,INT将是3)
实施例:
graphics.drawPolygon(new int[] {10, 20, 30}, new int[] {100, 20, 100}, 3);
输出:
3
我会使用Path2D对象,并将我的第一个点与其moveTo(...)
方法,然后使用其lineTo(...)
方法添加其他点。然后我可以通过Graphics2D#draw(...)
和Graphics2D#fill(...)
来绘制它或填充它。同时调用closePath()
将确保您的三角形正确关闭。
例如,下面的代码生成:
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Paint;
import java.awt.RenderingHints;
import java.awt.geom.Path2D;
import javax.swing.*;
public class Path2DExample extends JPanel {
private static final int PREF_W = 600;
private static final int PREF_H = PREF_W;
private static final Color COLOR_1 = Color.blue;
private static final Color COLOR_2 = Color.red;
private static final Paint GRADIENT_PAINT = new GradientPaint(0, 0, COLOR_1, 20, 20, COLOR_2, true);
private Path2D myPath = new Path2D.Double();
public Path2DExample() {
double firstX = (PREF_W/2.0) * (1 - 1/Math.sqrt(3));
double firstY = 3.0 * PREF_H/4.0;
myPath.moveTo(firstX, firstY);
myPath.lineTo(PREF_W - firstX, firstY);
myPath.lineTo(PREF_W/2.0, PREF_H/4.0);
myPath.closePath();
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
// to smooth out the jaggies
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
g2.setPaint(GRADIENT_PAINT); // just for fun!
g2.fill(myPath); // fill my triangle
}
@Override
public Dimension getPreferredSize() {
if (isPreferredSizeSet()) {
return super.getPreferredSize();
}
return new Dimension(PREF_W, PREF_H);
}
private static void createAndShowGui() {
Path2DExample mainPanel = new Path2DExample();
JFrame frame = new JFrame("Path2DExample");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.getContentPane().add(mainPanel);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGui();
}
});
}
}
使用Path2D对象的另外一个好处是,如果你想拖的形状,它并不难用MouseListener和MouseMotionListener来做,比如说:
private class MyMouseAdapter extends MouseAdapter {
private Point pPressed = null;
@Override
public void mousePressed(MouseEvent e) {
if (e.getButton() != MouseEvent.BUTTON1) {
return;
}
if (myPath.contains(e.getPoint())) {
pPressed = e.getPoint();
}
}
public void mouseDragged(MouseEvent e) {
drag(e);
}
@Override
public void mouseReleased(MouseEvent e) {
drag(e);
pPressed = null;
}
private void drag(MouseEvent e) {
if (pPressed == null) {
return;
}
Point p = e.getPoint();
int tx = p.x - pPressed.x;
int ty = p.y - pPressed.y;
AffineTransform at = AffineTransform.getTranslateInstance(tx, ty);
myPath.transform(at);
pPressed = p;
repaint();
};
}
整个事情看起来是这样:
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Paint;
import java.awt.Point;
import java.awt.RenderingHints;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.geom.AffineTransform;
import java.awt.geom.Path2D;
import javax.swing.*;
@SuppressWarnings("serial")
public class Path2DExample extends JPanel {
private static final int PREF_W = 600;
private static final int PREF_H = PREF_W;
private static final Color COLOR_1 = Color.blue;
private static final Color COLOR_2 = Color.red;
private static final Paint GRADIENT_PAINT = new GradientPaint(0, 0, COLOR_1,
20, 20, COLOR_2, true);
private Path2D myPath = new Path2D.Double();
public Path2DExample() {
double firstX = (PREF_W/2.0) * (1 - 1/Math.sqrt(3));
double firstY = 3.0 * PREF_H/4.0;
myPath.moveTo(firstX, firstY);
myPath.lineTo(PREF_W - firstX, firstY);
myPath.lineTo(PREF_W/2.0, PREF_H/4.0);
myPath.closePath();
MyMouseAdapter myMouseAdapter = new MyMouseAdapter();
addMouseListener(myMouseAdapter);
addMouseMotionListener(myMouseAdapter);
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
g2.setPaint(GRADIENT_PAINT);
g2.fill(myPath);
}
@Override
public Dimension getPreferredSize() {
if (isPreferredSizeSet()) {
return super.getPreferredSize();
}
return new Dimension(PREF_W, PREF_H);
}
private class MyMouseAdapter extends MouseAdapter {
private Point pPressed = null;
@Override
public void mousePressed(MouseEvent e) {
if (e.getButton() != MouseEvent.BUTTON1) {
return;
}
if (myPath.contains(e.getPoint())) {
pPressed = e.getPoint();
}
}
public void mouseDragged(MouseEvent e) {
drag(e);
}
@Override
public void mouseReleased(MouseEvent e) {
drag(e);
pPressed = null;
}
private void drag(MouseEvent e) {
if (pPressed == null) {
return;
}
Point p = e.getPoint();
int tx = p.x - pPressed.x;
int ty = p.y - pPressed.y;
AffineTransform at = AffineTransform.getTranslateInstance(tx, ty);
myPath.transform(at);
pPressed = p;
repaint();
};
}
private static void createAndShowGui() {
Path2DExample mainPanel = new Path2DExample();
JFrame frame = new JFrame("Path2DExample");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.getContentPane().add(mainPanel);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGui();
}
});
}
}
相关问题
- 1. 在三角形的三角形中绘制三角形
- 2. 在Java中绘制Sierpinski的三角形
- 3. 在Blend中绘制圆角三角形
- 4. 如何在二维数组中绘制三角形(Java)
- 5. 如何使用OpenTK绘制三角形?
- 6. GL_LINE_LOOP如何绘制三角形?
- 7. Direct3D 11 - 绘制三角形
- 8. 绘制纹理三角形
- 9. 绘制三角形iOS
- 10. 寻找绘制三角形
- 11. 三角形绘制方法
- 12. 在XNA中绘制的三角形
- 13. 如何在android xml中绘制三角形形状
- 14. Android:在三角形上绘制三角形
- 15. 在Java图形使用鼠标点击绘制三角形
- 16. 带圆角的绘制三角形
- 17. 如何在MATLAB中的图像中绘制三角形?
- 18. 在iPhone上绘制三角形UIButton?
- 19. c中的绘制三角形
- 20. 如何在数学图中绘制三角形?
- 21. 如何在Android中使用Path绘制三角形?
- 22. iOS - 如何在视图中绘制透明三角形
- 23. 如何使用画布在单页中绘制三角形?
- 24. 制作三角形用java
- 25. 在java中绘制六角形地图
- 26. 如何绘制弯曲边界的右下角三角形?
- 27. 如何绘制一个ASCII直角三角形?
- 28. 如何绘制直角三角形与蟒蛇
- 29. OpenGL的:如何绘制三角形或多边形平滑
- 30. 用OpenGL绘制一个三角形
请按照以下的链接:http://stackoverflow.com /问题/ 11919667 /三角拉法 – Oleksandr 2015-04-04 15:23:28