好吧,首先我知道如何用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. 繪製三角形
- 4. 在Blend中繪製圓角三角形
- 5. 如何在二維數組中繪製三角形(Java)
- 6. 繪製黃金三角形式的Java
- 7. 如何繪製和定位三角形?
- 8. 如何繪製相反的三角形?
- 9. GL_LINE_LOOP如何繪製三角形?
- 10. 如何繪製一個三角形UIButton
- 11. 如何使用OpenTK繪製三角形?
- 12. 尋找繪製三角形
- 13. 三角形繪製方法
- 14. Direct3D 11 - 繪製三角形
- 15. 繪製旋轉三角形
- 16. 繪製紋理三角形
- 17. 繪製三角形iOS
- 18. 在XNA中繪製的三角形
- 19. 如何在android xml中繪製三角形形狀
- 20. 如何在python中繪製三角形形狀?
- 21. Android:在三角形上繪製三角形
- 22. 如何繪製一個完美的三角形六角形?
- 23. 在Java圖形使用鼠標點擊繪製三角形
- 24. 帶圓角的繪製三角形
- 25. 如何在MATLAB中的圖像中繪製三角形?
- 26. 用三角形風扇繪製圓形
- 27. 在Java中使用循環繪製等腰三角形
- 28. c中的繪製三角形
- 29. 在iPhone上繪製三角形UIButton?
- 30. 在斜坡上繪製三角形
請按照以下的鏈接:http://stackoverflow.com /問題/ 11919667 /三角拉法 – Oleksandr 2015-04-04 15:23:28