试图找出最好的方法来做到这一点(在不交叉任何细节的情况下,请不要不要,我不知道)。我正在视觉上显示带有圆圈和线的图形(各种节点,边缘连接在一起)。每个节点都将在运行时添加,我无法对此进行硬编码。据我了解,所有绘画都需要在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); }}
3 回答
守着一只汪
TA贡献1872条经验 获得超3个赞
不要混合使用Swing(例如JFrame
)和AWT(例如Canvas
)组件。而不是Canvas
使用JPanel
&替代paintComponent(Graphics)
。
添加回答
举报
0/150
提交
取消