2016-11-16 45 views
0

儘管在本例中,X-Y值是硬編碼的,我們假設用戶動態輸入值並單擊按鈕在屏幕上查看結果。如何動態地居中圖形

根據最大尺寸計算幀是沒有意義的,因爲幀對於顯示器來說太大。

需要輸入X-Y值(無論大小有多大),並且圖像以幀爲中心顯示?

import java.awt.BasicStroke; 
import java.awt.Color; 
import java.awt.Graphics; 
import java.awt.Graphics2D; 
import java.awt.geom.Area; 
import java.awt.geom.Path2D; 

import javax.swing.JFrame; 
import javax.swing.JPanel; 

public class ZoomToXY extends JPanel 
{ 
    int x = 0; 
    public void paint(Graphics g) 
    { 
     //Can't see this. 
     int[] xs2 = {5308, 5306, 4143, 4143, 4120, 4119, 4118, 4117, 4116, 4114, 4112}; 
     int[] ys2 = {4474, 5329, 5306, 5171, 5171, 5173, 5175, 5177, 5179, 5181, 5182}; 

     BasicStroke traceStroke = new BasicStroke (1); //Line thickness 
     Graphics2D gc = (Graphics2D) g.create(); 

     gc.setColor(Color.RED); 
     gc.drawPolyline(xs2, ys2, 11); 
     gc.setStroke(traceStroke); 
     x++; 
    } 

    public static void main(String[] args) 
    { 
     JFrame frame = new JFrame(); 
     frame.add(new ZoomToXY()); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setBounds(20,20, 250,250); 
     frame.setVisible(true); 
    } 
} 
+1

您應該使用JPanel的paintComponent方法進行繪製。您必須找到最大的X或Y值,並縮小X和Y值以適合繪圖區域。 –

回答

1

我們無法看到多邊形或任何您製作的原因是因爲它超出了框架的範圍。讓我們來看看。

frame.setBounds(20,20, 250,250); 

這條線表示我們只會看到這些邊界內有什麼,儘管外面的所有東西也會被繪製但沒有顯示。嘗試在邊界內繪製矩形並查看。

g.fillRect(20, 20, 100, 100); 

您會看到一個矩形。但是我怎樣才能解決這個問題?由於具有5000像素×5000像素的畫面不適用於大多數顯示器,您可以使用較小的分辨率和較小的座標,或者使用相機。擁有一臺相機,你可以擁有任何想要的大世界,並且可以在其中移動。但是如果你的框架只能顯示100個像素,而你的多邊形是1000px,我們只能看到它的10%,這個問題很容易用zooming解決。這裏是一個topic如何實現一個gamecamera。使用gameCamera,您可以簡單地計算圖像的中心,然後進行翻譯。如果您需要幫助,請詢問。

一個250x250的框架非常小,認爲它有點大。另外爲什麼設置座標爲(20,20)?如果要將JFrame居中到當前顯示器,請致電:

frame.setLocationRelativeTo(null); 
+0

感謝您的帖子。這是我需要的翻譯命令。 –

+0

不客氣,隨時接受標記你解決問題的答案:) – Squiddie