链接两个椭圆形在java中

Hin*_*ara 2 java swing 2d

我正在使用drawline链接到圆圈,但我有一个问题是我的代码:

import java.awt.Color;
import java.awt.FontMetrics;
import java.awt.Graphics;
import javax.swing.JPanel;

public class Panneau extends JPanel {

public void paintComponent(Graphics g){
 // declaration 
                String text = "test";
                int x = 250, y = 200;
                int height = 50, width = 50;


                g.setColor(Color.yellow);
                g.fillOval(x-height/2, y-width/2,width, height);
g.fillOval((x-height/2)+100, (y-width/2)+50,width, height);

                FontMetrics fm = g.getFontMetrics();
                double textWidth = fm.getStringBounds(text, g).getWidth();
                g.setColor(Color.black);
                g.drawString(text, (int) (x - textWidth/2),(int) (y + fm.getMaxAscent() / 2));
            g.drawString(text, (int) (x - textWidth/2)+100,(int) (y + fm.getMaxAscent() / 2)+50);
            g.setColor(Color.black);
            g.drawLine(x,y,x+100,y+50);



}
}
Run Code Online (Sandbox Code Playgroud)

问题,我绘制的线从圆心开始,我想从圆绘制线(如图节点!)感谢帮助!:)

And*_*son 5

实际上,我意识到有一种方法可以通过以不同的顺序绘制图形元素来"破解它".这仍然绘制了整条线,但是通过它们的顶部有效地"擦除不需要的位"!

在此输入图像描述

import java.awt.*;
import javax.swing.*;

public class Panneau extends JPanel {

public void paintComponent(Graphics g){
    // declaration
    String text = "test";
    int x = 250, y = 200;
    int height = 50, width = 50;

    g.setColor(Color.black);
    g.drawLine(x,y,x+100,y+50);

    g.setColor(Color.yellow);
    g.fillOval(x-height/2, y-width/2,width, height);
    g.fillOval((x-height/2)+100, (y-width/2)+50,width, height);

    FontMetrics fm = g.getFontMetrics();
    double textWidth = fm.getStringBounds(text, g).getWidth();
    g.setColor(Color.black);
    g.drawString(text, (int) (x - textWidth/2),(int) (y + fm.getMaxAscent() / 2));
    g.drawString(text, (int) (x - textWidth/2)+100,(int) (y + fm.getMaxAscent() / 2)+50);
}

public Dimension getPreferredSize() {
    return new Dimension(400,280);
}

public static void main(String[] args) {
    Runnable r = new Runnable() {
        public void run() {
            Panneau p = new Panneau();
            JOptionPane.showMessageDialog(null, p);
        }
    };
    SwingUtilities.invokeLater(r);
}
}
Run Code Online (Sandbox Code Playgroud)

  • 为技巧+1;)@ user3080016,实际上有深刻的绘制方式,特别是绘图.您需要通过相互比较来参数化每个对象的位置.但是,尝试使用数学方程式"ax + by + c = 0"和"(xh)^ 2 +(yk)^ 2 - r ^ 2 = 0`:`找到线的交点和圆的外线: h,k)`是中心安德鲁的解决方案是好的,但如果椭圆形是透明的怎么办?这就是为什么我们应该使用几何计算来找到线和两个圆的交点,并在绘制线时将其用作两个边 (2认同)