第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

如何從一個(gè)jpanel到另一個(gè)jpanel畫一條線

如何從一個(gè)jpanel到另一個(gè)jpanel畫一條線

夢(mèng)里花落0921 2023-07-13 14:00:25
我有兩個(gè) JPanel,我想單擊第一個(gè)面板,然后單擊第二個(gè)面板,并在兩個(gè)面板之間繪制一條直線。此外,放置后,該線必須保留在兩個(gè)面板之間。有人可以告訴我從哪里開始嗎?這兩個(gè)面板放置在第三個(gè)面板上,它們是下圖中的藍(lán)色矩形。先感謝您。父 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貢獻(xiàn)1765條經(jīng)驗(yàn) 獲得超5個(gè)贊

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


父面板需要知道子面板之間的關(guān)系。


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


您在父面板類中定義 ArrayList:


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

然后根據(jù)需要將組件對(duì)添加到 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);

}

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


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


查看完整回答
反對(duì) 回復(fù) 2023-07-13
  • 1 回答
  • 0 關(guān)注
  • 102 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)