java程序绘制直线 也数学里一样, 也是需要两个点即可实现
直角坐标系和屏幕坐标系不一样: 为了能够正确的显示出来,那么就要确保直线在JPanel等容器的可见范围内,如果点的坐标有负数, 或者 超过了容器的最大尺寸, 那么就无法正确的全部显示出来
2.awt/swing里面直线的坐标,是int类型的整数, 不支持小数
数学里P(2.8,6.7)可以,在awt/swing里就不支持
3. javaFX支持坐标用小数表示
这是我以前写的一个可以画多颜色多图形的东西,给你看看..import java.awt.*
import java.awt.event.*
import java.util.ArrayList
import java.util.Map
import javax.swing.*
public class DrawBorder extends JFrame implements MouseListener,
MouseMotionListener {
// private JComboBox
private JLabellabel
private JLabellabelColor
private JLabellabelShape
private String[] colors = { "Black", "Blue", "Green", "Cyan", "Gray",
"Orange", "Red" }
private String[] shapes = { "Line", "Rectangle", "Oval", "TDRectangle" }
private Map mpColor
private JComboBox comboboxColor
private JComboBox comboboxShape
ArrayList lstShape
protected int x1
protected int y1
protected int x2
protected int y2
protected String color
private Stringshape
public void display() {
shape = "Line"
comboboxShape = new JComboBox(shapes)
comboboxShape.setMaximumRowCount(shapes.length)
comboboxShape.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent event) {
// determine whether check box selected
if (event.getStateChange() == ItemEvent.SELECTED) {
shape = shapes[comboboxShape.getSelectedIndex()]
}
}
})
color = "BLACK"
comboboxColor = new JComboBox(colors)
comboboxColor.setMaximumRowCount(colors.length)
comboboxColor.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent event) {
if (event.getStateChange() == ItemEvent.SELECTED) {
color = colors[comboboxColor.getSelectedIndex()]
}
}
})
label = new JLabel()
labelShape = new JLabel("图形:")
labelColor = new JLabel("颜色:")
label.setText(shape)
// getContentPane().add(label)
lstShape = new ArrayList()
Container container = getContentPane()
container.setLayout(new FlowLayout())
container.add(labelShape)
container.add(comboboxShape)
container.add(labelColor)
container.add(comboboxColor)
container.add(label)
getContentPane().setBackground(Color.WHITE)
addMouseListener(this)
addMouseMotionListener(this)
setSize(600, 600)
setVisible(true)
}
public void mouseClicked(MouseEvent e) {
label.setText("单击鼠标在: [" + e.getX() + ", " + e.getY() + "]")
}
public void mouseEntered(MouseEvent e) {
label.setText("鼠标在: [" + e.getX() + ", " + e.getY() + "]")
}
public void mouseExited(MouseEvent e) {
label.setText("鼠标在: [窗口外]")
}
public void mousePressed(MouseEvent e) {
label.setText("按住鼠标在: [" + e.getX() + ", " + e.getY() + "]")
x1 = e.getX()
y1 = e.getY()
}
public void mouseReleased(MouseEvent e) {
label.setText("松开鼠标在: [" + e.getX() + ", " + e.getY() + "]")
// 判断是否按住鼠标并拖动过,如果不则不产生图形
if (((x1 == 0 &&y1 == 0) || (x2 == 0 &&y2 == 0)) == false) {
if (this.shape.equals("Line")) {
lstShape.add(new Line(x1, y1, x2, y2, color))
}
else if (this.shape.equals("Rectangle")) {
if (x2 >x1 &&y2 >y1) {
lstShape.add(new Rectangle(x1, y1, x2 - x1, y2 - y1, color))
}
else if (x2 <x1 &&y2 >y1) {
lstShape.add(new Rectangle(x2, y1, x1 - x2, y2 - y1, color))
}
else if (x2 >x1 &&y2 <y1) {
lstShape.add(new Rectangle(x1, y2, x2 - x1, y1 - y2, color))
}
else if (x2 <x1 &&y2 <y1) {
lstShape.add(new Rectangle(x2, y2, x1 - x2, y1 - y2, color))
}
}
else if (this.shape.equals("Oval")) {
if (x2 >x1 &&y2 >y1) {
lstShape.add(new Oval(x1, y1, x2 - x1, y2 - y1, color))
}
else if (x2 <x1 &&y2 >y1) {
lstShape.add(new Oval(x2, y1, x1 - x2, y2 - y1, color))
}
else if (x2 <x1 &&y2 <y1) {
lstShape.add(new Oval(x2, y2, x1 - x2, y1 - y2, color))
}
else if (x2 >x1 &&y2 <y1) {
lstShape.add(new Oval(x1, y2, x2 - x1, y1 - y2, color))
}
}
else if (this.shape.equals("TDRectangle")) {
if (x2 >x1 &&y2 >y1) {
lstShape.add(new TDRectangle(x1, y1, x2 - x1, y2 - y1, color))
}
else if (x2 <x1 &&y2 >y1) {
lstShape.add(new TDRectangle(x2, y1, x1 - x2, y2 - y1, color))
}
else if (x2 >x1 &&y2 <y1) {
lstShape.add(new TDRectangle(x1, y2, x2 - x1, y1 - y2, color))
}
else if (x2 <x1 &&y2 <y1) {
lstShape.add(new TDRectangle(x2, y2, x1 - x2, y1 - y2, color))
}
}
}
// 初始化图形坐标
x1 = y1 = x2 = y2 = 0
repaint()
}
public void mouseDragged(MouseEvent e) {
label.setText("拖动鼠标在: [" + e.getX() + ", " + e.getY() + "]")
x2 = e.getX()
y2 = e.getY()
label.setText("图形:" + shape)
repaint()
}
public void mouseMoved(MouseEvent e) {
label.setText("移动动鼠标在: [" + e.getX() + ", " + e.getY() + "]")
}
public void paint(Graphics g) {
super.paint(g)
g.setColor(this.toColor())
if (this.shape.equals("Line")) {
g.drawLine(x1, y1, x2, y2)
}
else if (this.shape.equals("Rectangle")) {
if (x2 >x1 &&y2 >y1) {
g.drawRect(x1, y1, x2 - x1, y2 - y1)
}
else if (x2 <x1 &&y2 >y1) {
g.drawRect(x2, y1, x1 - x2, y2 - y1)
}
else if (x2 <x1 &&y2 <y1) {
g.drawRect(x2, y2, x1 - x2, y1 - y2)
}
else if (x2 >x1 &&y2 <y1) {
g.drawRect(x1, y2, x2 - x1, y1 - y2)
}
}
else if (this.shape.equals("Oval")) {
if (x2 >x1 &&y2 >y1) {
g.drawOval(x1, y1, x2 - x1, y2 - y1)
}
else if (x2 <x1 &&y2 >y1) {
g.drawOval(x2, y1, x1 - x2, y2 - y1)
}
else if (x2 <x1 &&y2 <y1) {
g.drawOval(x2, y2, x1 - x2, y1 - y2)
}
else if (x2 >x1 &&y2 <y1) {
g.drawOval(x1, y2, x2 - x1, y1 - y2)
}
}
else if (this.shape.equals("TDRectangle")) {
if (x2 >x1 &&y2 >y1) {
g.draw3DRect(x1, y1, x2 - x1, y2 - y1, true)
}
else if (x2 <x1 &&y2 >y1) {
g.draw3DRect(x2, y1, x1 - x2, y2 - y1, true)
}
else if (x2 <x1 &&y2 <y1) {
g.draw3DRect(x2, y2, x1 - x2, y1 - y2, true)
}
else if (x2 >x1 &&y2 <y1) {
g.draw3DRect(x1, y2, x2 - x1, y1 - y2, true)
}
}
// 画出存放在list中的图形
for (Object object : lstShape) {
if (object.getClass().toString().equals("class DrawBorder$Line")) {
Line line = (Line) object
g.setColor(line.toColor())
g.drawLine(line.x1, line.y1, line.x2, line.y2)
}
else if (object.getClass().toString()
.equals("class DrawBorder$Rectangle")) {
Rectangle rectangle = (Rectangle) object
g.setColor(rectangle.toColor())
g.drawRect(rectangle.x1, rectangle.y1, rectangle.x2, rectangle.y2)
}
else if (object.getClass().toString().equals("class DrawBorder$Oval")) {
Oval oval = (Oval) object
g.setColor(oval.toColor())
g.drawOval(oval.x1, oval.y1, oval.x2, oval.y2)
}
else if (object.getClass().toString().equals(
"class DrawBorder$TDRectangle")) {
TDRectangle tDRectangle = (TDRectangle) object
g.setColor(tDRectangle.toColor())
g.draw3DRect(tDRectangle.x1, tDRectangle.y1, tDRectangle.x2,
tDRectangle.y2, false)
}
}
}
public static void main(String[] args) {
DrawBorder db = new DrawBorder()
db.display()
db.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
}
public Color toColor() {
if (this.color.equals("Blue")) {
return Color.BLUE
}
else if (this.color.equals("Green")) {
return Color.GREEN
}
else if (this.color.equals("Cyan")) {
return Color.CYAN
}
else if (this.color.equals("Gray")) {
return Color.GRAY
}
else if (this.color.equals("Orange")) {
return Color.ORANGE
}
else if (this.color.equals("Red")) {
return Color.RED
}
else
return Color.BLACK
}
class Line extends DrawBorder {
Line(int x1, int y1, int x2, int y2, String color) {
this.x1 = x1
this.y1 = y1
this.x2 = x2
this.y2 = y2
this.color = color
}
}
class Rectangle extends DrawBorder {
Rectangle(int x1, int y1, int x2, int y2, String color) {
this.x1 = x1
this.y1 = y1
this.x2 = x2
this.y2 = y2
this.color = color
}
}
class Oval extends DrawBorder {
Oval(int x1, int y1, int x2, int y2, String color) {
this.x1 = x1
this.y1 = y1
this.x2 = x2
this.y2 = y2
this.color = color
}
}
class TDRectangle extends DrawBorder {
TDRectangle(int x1, int y1, int x2, int y2, String color) {
this.x1 = x1
this.y1 = y1
this.x2 = x2
this.y2 = y2
this.color = color
}
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)