java绘画图形_java – 动态图形对象绘画

试图找出最好的方法来做到这一点(并且没有跨越任何具体细节,不是我不知道的).

我正在以可视方式显示图形(各种节点,边缘连接它们),圆圈和线条代表这样.每个节点都将在运行时添加,我无法对其进行硬编码.根据我的理解,所有绘画都需要在paint(Graphics g)方法中完成 – 这没有用,因为我无法更改参数,而且似乎只在初始创建期间调用它?

现在我正在考虑让它调用各种其他方法,传递Graphics对象,并依赖于其他变量 – 我将决定这是否是我甚至想要调用的(因为paint()方法是我唯一可以调用的方法).

我完全错了吗?从来没有打扰过这个.

为了让您更好地了解我想要最终得到的内容:我希望能够传递我想为节点添加的形状的坐标,然后将其添加到目前为止我在图表上的任何内容.然后与边缘相同,我希望能够传递线的起点和终点,以便在当时存在的任何内容上重新绘制.

不完全是我现在想要的 – 但是你会从我到目前为止拼凑的内容中得到这个想法:

import java.awt.*;

import javax.swing.*;

public class MyCanvas extends Canvas

{

public MyCanvas()

{

}

public void paint(Graphics graphics)

{

// Keep this until I figured out if it's painted on load or not.

graphics.drawLine(10, 20, 350, 380);

}

public static void main(String[] args)

{

MyCanvas canvas = new MyCanvas();

JFrame frame = new JFrame();

int vertexes = 0;

// Change this next part later to be dynamic.

vertexes = 10;

int canvasSize = vertexes * vertexes;

frame.setSize(canvasSize, canvasSize);

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frame.getContentPane().add(canvas);

frame.setVisible(true);

}

public void drawNode(int x, int y, Graphics g)

{

// Treat each location as a 10x10 block. If position 1,1 then go to (5,5) - If position 3,5 then go to (25, 45) eg: (x*10)-5, (y*10)-5

int xLoc = (x*10) - 5;

int yLoc = (y*10) - 5;

g.setColor(Color.white);

g.fillOval(xLoc, yLoc, 8, 8);

g.drawOval(xLoc, yLoc, 8, 8);

}

public void drawArc(int x, int y, int xx, int yy, Graphics g)

{

int xLoc = (x*10) - 5;

int yLoc = (y*10) - 5;

int xxLoc = (xx*10) - 5;

int yyLoc = (yy*10) - 5;

g.drawLine(xLoc, yLoc, xxLoc, yyLoc);

}

}

编辑:(安德鲁的回应)

import java.awt.*;

import java.awt.image.BufferedImage;

import javax.swing.*;

public class MyCanvas extends JPanel

{

public MyCanvas() {

}

public void paintComponent(Graphics g) {

super.paintComponent(g);

}

public static void main(String[] args)

{

int vertexes = 0;

// Change this next part later to be dynamic.

vertexes = 10;

int canvasSize = vertexes * vertexes;

JFrame frame = new JFrame();

JLabel label = new JLabel();

BufferedImage bImage = new BufferedImage(canvasSize, canvasSize, BufferedImage.TYPE_INT_ARGB);

Graphics2D g2d = bImage.createGraphics();

g2d.drawLine(50, 50, 300, 300);

ImageIcon iIcon = new ImageIcon(bImage);

label.setIcon(iIcon);

frame.add(label);

frame.setVisible(true);

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

g2d = drawNode(1,1,g2d);

label.repaint();

}

public static Graphics2D drawNode(int x, int y,Graphics2D g2d)

{

// Treat each location as a 10x10 block. If position 1,1 then go to (5,5) - If position 3,5 then go to (25, 45) eg: (x*10)-5, (y*10)-5

int xLoc = (x*10) - 5;

int yLoc = (y*10) - 5;

g2d.setColor(Color.white);

g2d.fillOval(xLoc, yLoc, 8, 8);

g2d.drawOval(xLoc, yLoc, 8, 8);

return g2d;

}

public static void drawArc(int x, int y, int xx, int yy)

{

int xLoc = (x*10) - 5;

int yLoc = (y*10) - 5;

int xxLoc = (xx*10) - 5;

int yyLoc = (yy*10) - 5;

// g.drawLine(xLoc, yLoc, xxLoc, yyLoc);

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值