学习循环,数组,方法......后,我开始玩图形,但遇到了一些问题。当我看到这个例子时,我正在寻找一些示例:http://javaceda.blogspot.ch/2010/06/draw-cartesian-coordinate-system-in.htmlJava中的笛卡尔平面
它提供了Java中笛卡尔平面的示例。我几乎可以理解该代码的所有内容(除了像invokelater,SwingUtilities这几行以外,我稍后会看看它们。)。
假设现在我想用构造函数,getters,将点的笛卡尔坐标转换为“像素坐标”的方法以及在平面上打印点的方法来创建类“Point”。
所以,这里是从链路所采取的代码:
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
public class Cartesian {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
CartesianFrame frame = new CartesianFrame();
frame.showUI();
}
});
}
}
class CartesianFrame extends JFrame {
CartesianPanel panel;
public CartesianFrame() {
panel = new CartesianPanel();
add(panel);
}
public void showUI() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setTitle("Cartesian");
setSize(700, 700);
setVisible(true);
}
}
class CartesianPanel extends JPanel {
// x-axis coord constants
public static final int X_AXIS_FIRST_X_COORD = 50;
public static final int X_AXIS_SECOND_X_COORD = 600;
public static final int X_AXIS_Y_COORD = 600;
// y-axis coord constants
public static final int Y_AXIS_FIRST_Y_COORD = 50;
public static final int Y_AXIS_SECOND_Y_COORD = 600;
public static final int Y_AXIS_X_COORD = 50;
//arrows of axis are represented with "hipotenuse" of
//triangle
// now we are define length of cathetas of that triangle
public static final int FIRST_LENGHT = 10;
public static final int SECOND_LENGHT = 5;
// size of start coordinate lenght
public static final int ORIGIN_COORDINATE_LENGHT = 6;
// distance of coordinate strings from axis
public static final int AXIS_STRING_DISTANCE = 20;
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
// x-axis
g2.drawLine(X_AXIS_FIRST_X_COORD, X_AXIS_Y_COORD,
X_AXIS_SECOND_X_COORD, X_AXIS_Y_COORD);
// y-axis
g2.drawLine(Y_AXIS_X_COORD, Y_AXIS_FIRST_Y_COORD,
Y_AXIS_X_COORD, Y_AXIS_SECOND_Y_COORD);
// draw origin Point
g2.fillOval(
X_AXIS_FIRST_X_COORD - (ORIGIN_COORDINATE_LENGHT/2),
Y_AXIS_SECOND_Y_COORD - (ORIGIN_COORDINATE_LENGHT/2),
ORIGIN_COORDINATE_LENGHT, ORIGIN_COORDINATE_LENGHT);
// numerate axis
int xCoordNumbers = 10;
int yCoordNumbers = 10;
int xLength = (X_AXIS_SECOND_X_COORD - X_AXIS_FIRST_X_COORD)
/xCoordNumbers;
int yLength = (Y_AXIS_SECOND_Y_COORD - Y_AXIS_FIRST_Y_COORD)
/yCoordNumbers;
// draw x-axis numbers
for(int i = 1; i < xCoordNumbers; i++) {
g2.drawLine(X_AXIS_FIRST_X_COORD + (i * xLength),
X_AXIS_Y_COORD - SECOND_LENGHT,
X_AXIS_FIRST_X_COORD + (i * xLength),
X_AXIS_Y_COORD + SECOND_LENGHT);
g2.drawString(Integer.toString(i),
X_AXIS_FIRST_X_COORD + (i * xLength) - 3,
X_AXIS_Y_COORD + AXIS_STRING_DISTANCE);
}
//draw y-axis numbers
for(int i = 1; i < yCoordNumbers; i++) {
g2.drawLine(Y_AXIS_X_COORD - SECOND_LENGHT,
Y_AXIS_SECOND_Y_COORD - (i * yLength),
Y_AXIS_X_COORD + SECOND_LENGHT,
Y_AXIS_SECOND_Y_COORD - (i * yLength));
g2.drawString(Integer.toString(i),
Y_AXIS_X_COORD - AXIS_STRING_DISTANCE,
Y_AXIS_SECOND_Y_COORD - (i * yLength));
}
}
}
这里是我想要添加的类Point:
class Point{
public int x,y;
public Point(int x,int y){
this.x=x;
this.y=y;
}
public Point FromCartToPix() {
this.x=X_AXIS_FIRST_X_COORD+(x*xLength);
this.y=Y_AXIS_SECOND_Y_COORD - (y * yLength);
return this;
}
public int GetX(){
return this.x;
}
public int GetY(){
return this.y;
}
public void DrawPoint(){
g2.fillOval(
this.FromCartToPix().Getx(),
this.FromCartToPix().Gety(),
ORIGIN_COORDINATE_LENGHT, ORIGIN_COORDINATE_LENGHT);
}
}
Java的手册,我有,刚一关于Java Graphics和Swing的小章,因此我无法实现这个类。我认为应该里面
PaintComponent(Graphics g)
被插入,否则我将无法使用
g2.filloval
但我不能使用
Point a = new Point (2,3);
主要
内我知道这是一个模糊和普遍的问题,但我无法让它工作。我搜索了很多关于Graphics2D g2 =(Graphics2D)g的用法,但是找不到精确的解释,甚至在Javadocs上也是如此。
如果妳知道解释它的链接我将不胜感激
在此先感谢
可能的[复制](http://stackoverflow.com/q/9371961/230513)。 – trashgod