奇怪的重绘功能

wsed 发布于 2019-03-09 java 最后更新 2019-03-09 14:41 0 浏览

计划简介 嗨,大家好。今天早上我很无聊,决定写一个图表程序。最终,我将能够在此软件上运行诸如Dijksta算法之类的东西。 当屏幕上的任何内容发生变化时,对JPanel方法的PLACEHOLDER_FOR_CODE_1方法进行调用,在该方法中绘制了所有内容。这是JPanel绘画方法:

public void paint(Graphics g)
{
    for(Node node : graph.getNodes()){
        node.paint(g);
    }
for(Link link : graph.getLinks()){
        link.paint(g);
    }
}
它只是遍历列表中的每个元素,并绘制它们。 节点类的paint方法是:
public void paint(Graphics g)
{
    g.setColor(color);
    g.drawOval(location.x, location.y, 50, 50);
    g.setColor(Color.BLACK);
    g.drawString(name, location.x + 20, location.y + 20);
}
对于链接,它是:
public void paint(Graphics g)
{
    Point p1 = node1.getLocation();
    Point p2 = node2.getLocation();
    // Grab the two nodes from the link.
    g.drawLine(p1.x + 20, p1.y + 20, p2.x + 20, p2.y + 20);
    // Draw the line between them.
    int midPointX = ((p1.x + p2.x) / 2) + (100 / (p2.x - p1.x));
    int midPointY = ((p1.y + p2.y) / 2) + 30;
    // Compute the mid point of the line and get it closer to the line.
    g.setColor(Color.BLACK);
    g.drawString(String.valueOf(weight), midPointX, midPointY);
}
问题 我使用JOptionPane类时出现了这个问题。当我选择添加新节点的选项并选择放置位置时,会弹出inputDialog,询问节点的名称。 节点添加得很好,因为会出现这种情况: enter image description here     这是个常见的问题吗;也许paintrepaint有问题? 尽管如此,这里是调用inputDialog的代码:
Function addNode = functionFac.getInstance(state);
                String name = "";
                while(!name.matches("[A-Za-z]+")) {
                    name = JOptionPane.showInputDialog("Please enter the name of the node.", null);
                }
addNode.execute(stage, new NodeMessage(arg0.getPoint(), name));
PS:函数是我写的一个接口类型。
已邀请:

fet

赞同来自:

“Swing程序应覆盖paintComponent(),而不是覆盖paint()。” - Painting in AWT and Swing: The Paint Methods。 “如果你不尊重不透明属性,你可能会看到视觉瑕疵。” - JComponent 另请参阅此Q&A,其中检查了相关问题。