亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何從一個jpanel到另一個jpanel畫一條線

如何從一個jpanel到另一個jpanel畫一條線

夢里花落0921 2023-07-13 14:00:25
我有兩個 JPanel,我想單擊第一個面板,然后單擊第二個面板,并在兩個面板之間繪制一條直線。此外,放置后,該線必須保留在兩個面板之間。有人可以告訴我從哪里開始嗎?這兩個面板放置在第三個面板上,它們是下圖中的藍色矩形。先感謝您。父 JPanelimport javax.swing.*;import java.awt.*;import java.util.ArrayList;            class WorkflowPanel extends JPanel {                private volatile int screenX = 0;                private volatile int screenY = 0;                private static final int RADIUS = 35;                private int radius = RADIUS;                private ArrayList<ModelView> relationship;                WorkflowPanel() {                    relationship = new ArrayList<>();                    relationship.add(new ModelView());                    relationship.add(new ModelView());                    add(relationship.get(0));                    add(relationship.get(1));                    setLayout(null);                    setVisible(true);                }                @Override                protected void paintChildren(Graphics g) {                        for (int i = 0; i < relationship.size(); i += 2) {                        ModelView one = relationship.get(i);                        ModelView two = relationship.get(i + 1);                        Point p1 = new Point(one.getLocation().x + one.getWidth() / 2, one.getLocation().y + one.getHeight() / 2);                        Point p2 = new Point(two.getLocation().x + two.getWidth() / 2, two.getLocation().y + two.getHeight() / 2);                        g.drawLine(p1.x, p1.y, p2.x, p2.y);                        this.repaint();                    }                    super.paintChildren(g);                }                public ArrayList<ModelView> getRelationship() {                    return relationship;                }            }
查看完整描述

1 回答

?
POPMUISE

TA貢獻1765條經驗 獲得超5個贊

有人可以告訴我從哪里開始嗎?


父面板需要知道子面板之間的關系。


一種方法是保持跟蹤ArrayList組件對之間的關系。然后,您需要重寫paintChildren(...)父面板的方法以在兩個子面板之間繪制一條線。


您在父面板類中定義 ArrayList:


private ArrayList<Component> relationships = new ArrayList<Component>();

然后根據需要將組件對添加到 ArrayList:


relationships.add( component1a );

relationships.add( component1b );

基本的繪畫代碼是:


@Override

protected void paintChildren(Graphics g)

{

    for (int i = 0; i < relationships.size(); i += 2)

    {

        Component one = relationships.get(i);

        Component two = relationships.get(i + 1);

        Point p1 = //calculate the center of component one

        Point p2 = //calculate the center of component two

        g.drawline(p1.x, p1.y, p2.x, p2.y);

    }


    super.paintChildren(g);

}

因此,上面的代碼應該在添加到 ArrayList 的每對組件的中心點之間繪制線條。然后,子面板將繪制在線條的頂部,以便線條看起來像是從每個組件的邊緣出來的。


查看trashgod 的GraphPanel示例。此示例支持拖動形狀,并且線條將跟隨形狀。


查看完整回答
反對 回復 2023-07-13
  • 1 回答
  • 0 關注
  • 104 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號