3

小さなワークフロー エディターのソフトウェア ソリューションに取り組んでいます。このために、自分自身JPanelを削除したり、主要な情報を編集したりするなどの機能を備えた独自のものを作成しました。

これはどのように見えるかです:

可動部品

ポイントは、矢印などの動的コネクタが必要だということです。drawline で試してみましたが、動的ではなく、見栄えもよくありません。つまり、ボックスの 1 つを移動すると、描画された線の位置も変更する必要があります。

大きなボックスJPanelは移動可能でサイズ変更可能です。左右の接続点はJButtonsです。構造は、発信接続は右から開始し、受信は左から始まるというものJButtonです。

それを設定する方法はありますか?

ソフトウェアは企業向けであるため、ソースコードの多くを投稿することはできません。

4

1 に答える 1

3

Graphicsオブジェクトをに変換しGraphics2Dて設定しましたRenderHintsか?すなわち

Graphics2D g2d=(Graphics2D)g;   
g2d.setRenderingHint(RenderHints.KEY_ANTIALIASING,RenderHints.VALUE_ANTIALIASING _ON);

これにより、いくつかの優れたアンチエイリアシング効果が追加され、線の外観がまっすぐになる可能性があります。

また、ビアのストローク幅を大きくGraphics2D#setStrokeすると、ギザギザのエッジが太くなるにつれて消えます。

この例を参照してください(マウスを押し、ドラッグして放し、線を作成します)。

コメントアウトg2d.setRenderingHint(..)ありおよびコメントアウトg2d.setStroke(..)内:paintComponent(..)

ここに画像の説明を入力してください

g2d.setRenderingHint(..)コメントありとコメントg2d.setStroke(..)なし:

ここに画像の説明を入力してください

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.RenderingHints;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.geom.Line2D;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class Test {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                Test gui = new Test();
            }
        });
    }

    public Test() {
        initComponents();
    }

    private void initComponents() {
        JFrame frame = new JFrame("Line Demo");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        frame.add(new MyPanel());

        frame.pack();
        frame.setVisible(true);
    }
}

class MyPanel extends JPanel {

    Point point1;
    Point point2;
    Line2D line2d;

    public MyPanel() {
        addMouseListener(new MouseAdapter() {
            @Override
            public void mousePressed(MouseEvent me) {
                super.mousePressed(me);
                point1 = me.getPoint();
            }
        });
        addMouseMotionListener(new MouseAdapter() {
            @Override
            public void mouseDragged(MouseEvent me) {
                super.mouseDragged(me);
                point2 = me.getPoint();
                line2d = new Line2D.Double(point1, point2);
                repaint();
            }
        });
    }

    @Override
    public Dimension getPreferredSize() {
        return new Dimension(300, 300);
    }

    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2d = (Graphics2D) g;

        //Set  anti-alias!
        g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
                RenderingHints.VALUE_ANTIALIAS_ON);

        if (point1 != null && point2 != null) {
            g2d.setPaint(Color.RED);
            g2d.setStroke(new BasicStroke(1.5f));//set stroke size
            g2d.draw(line2d);
        }
    }
}

上記が役に立たない場合は、SSCCEを投稿することで、何が問題になっているのかをテストして確認し、改善することができます。

于 2013-01-11T14:44:17.797 に答える