【问题标题】:Java Swing, draw a line at a specific angle?Java Swing,以特定角度画一条线?
【发布时间】:2015-05-04 14:25:48
【问题描述】:

我用 Java 制作了一个 JSlider,它改变了线条需要倾斜的角度。

angle = new JSlider(SwingConstants.HORIZONTAL, 0, 180, 90);
angle.setSize(300, 50);
angle.setLocation(650, 60);
angle.setPaintTicks(true);
angle.setPaintTrack(true);
angle.setMinorTickSpacing(10);
angle.setMajorTickSpacing(30);
angle.setPaintLabels(true);
angle.addChangeListener(this);

thepanel.add(angle);

我希望代码从 JSlider 绘制实现角度的那条线。

这是我的代码:

public void paintComponent(Graphics g){
    super.paintComponent(g);

    int angle = intAngle;
    Graphics2D graphics = (Graphics2D)g;

    int startX = getWidth()/2;
    int startY = getHeight()/2;
    int length = 200;


    int endX = startX + length * (int)Math.cos(Math.toRadians(angle));
    int endY = startY + length * (int)Math.sin(Math.toRadians(angle));

    graphics.drawLine(startX, startY, endX, endY);

}

给定值旋转线背后的数学原理是什么?

【问题讨论】:

标签: java swing angle jslider


【解决方案1】:

第 1 步:扩展 JPanel 并覆盖 paintComponent()。你已经提到你已经做了这一步,但更多信息是可用的here

第 2 步:将 JSlider 的值放入 paintComponent() 方法中。

第 3 步:向 JSlider 添加一个侦听器,告诉您的 JPanel 在值更改时重新绘制自己。

第四步:用基本的三角法算出要画的线的 X 和 Y 坐标,然后画出来。它可能看起来像这样:

public void paintComponent(Graphics g){
   super.paintComponent(g);
   int angle = getSliderValue(); //you have to implement this function

   int startX = getWidth()/2;
   int startY = getHeight()/2;
   int length = 100;

   int endX = startX + (int)Math.cos(Math.toRadians(angle)) * length;
   int endY = startY + (int)Math.sin(Math.toRadians(angle)) * length;

  g.drawLine(startX, startY, endX, endY);
}

【讨论】:

  • 我试过了,但只能画出 0、90 和 180 度。两者之间的任何角度都会消失。
  • @Eliscpe 那么我建议您以MCVE 的形式发布更新后的代码。
  • 我认为这是因为转换为弧度。我做了一个 system.out.println 并且只显示 0、1 和 2 弧度,因为它是一个整数。那么有什么办法不使用弧度吗?或者使用 Double 值而不是 Integers 执行 g.drawLine。
  • @Eliscpe 如果没有 MCVE,我真的无能为力(编辑您的问题,而不是尝试将其作为评论发布),但基础知识是使用双打来存储所有内容,然后只需转换为 int当你需要实际画线时。
  • 但是在你把它转换回int之后,小数就被去掉了。
猜你喜欢
  • 2011-04-01
  • 1970-01-01
  • 2012-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-02
  • 1970-01-01
  • 2016-04-08
相关资源
最近更新 更多