2015-05-04 68 views
2

我用Java製作了一個JSlider,它改變了線條需要傾斜的角度。Java Swing,以特定角度畫一條線?

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); 

} 

什麼是背後的旋轉給出一個值線的數學?

+0

http://en.wikipedia.org/wiki/Trigonometric_functions :) – Fildor

+0

你在'JPanel'繪製的角度? –

+0

我正在繪製公共類的角度JProject extends JPanel { – Eliscpe

回答

4

步驟1:延伸JPanel並覆蓋paintComponent()。你已經提到你已經做了這一步,但更多的信息可用here

步驟2:將JSlider的值存入您的paintComponent()方法中。

步驟3:向JSlider添加一個偵聽器,告訴您的JPanel每當值更改時重新繪製自己。

第4步:使用基本的三角函數來確定要繪製的線的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

我試過了,但只繪製了0,90和180度。兩者之間的任何角度消失。 – Eliscpe

+0

@Eliscpe然後我建議你以[MCVE](http://stackoverflow.com/help/mcve)的形式發佈你的更新代碼。 –

+0

我認爲這是因爲轉換爲弧度。我做了一個system.out.println,只顯示0,1和2弧度,因爲它是一個整數。那麼有沒有辦法不使用弧度?或者使用Double值而不是整數執行g.drawLine。 – Eliscpe