1

プログラムの簡単な説明

こんにちは、みんな。今朝は退屈だったので、グラフ作成プログラムを書くことにしました。最終的には、このソフトウェアでDijksta のアルゴリズムなどを実行できるようになります。

画面上で何かが変化すると、すべてが描画される のrepaintメソッドが呼び出さJPanelれます。これはJPanelペイント方法です:

public void paint(Graphics g)
{
    for(Node node : graph.getNodes()){
        node.paint(g);
    }

    for(Link link : graph.getLinks()){
        link.paint(g);
    }
}

リスト内の各要素を循環して描画するだけです。

ノード クラスのペイント メソッドは次のとおりです。

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、ノードの名前を尋ねるポップアップが表示されます。

この動作が発生するため、ノードは正常に追加されます。

ここに画像の説明を入力 これは一般的な問題ですか。paintまたはrepaintおそらく問題?

それにもかかわらず、これは を呼び出すコードです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 : 関数は、私が作成したインターフェイス タイプです。

4

1 に答える 1

4

「Swing プログラムはpaintComponent()、オーバーライドではなくオーバーライドする必要がありますpaint()。」—<a href="http://www.oracle.com/technetwork/java/painting-140037.html#callbacks" rel="nofollow noreferrer"> AWT と Swing での描画: ペイント方法

「不透明なプロパティを尊重しないと、視覚的なアーティファクトが表示される可能性があります。」—<a href="http://docs.oracle.com/javase/7/docs/api/javax/swing/JComponent.html#paintComponent %28java.awt.Graphics%29" rel="nofollow noreferrer">JComponent

関連する問題を調べるこのQ&Aも参照してください。

于 2013-04-11T17:16:40.740 に答える