2016-11-16 7 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

Вы должны нарисовать, используя метод paintComponent JPanel. Вы должны найти наибольшее значение X или Y и уменьшить свои значения X и Y, чтобы они соответствовали области рисования. –

ответ

1

Причина, по которой мы не можем видеть многоугольник или что вы делаете, заключается в том, что он находится за пределами рамки. Давайте взглянем.

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

Эта линия показывает, что мы будем видеть только то, что внутри этих границ, хотя все вне также будет нарисован, но не показано. Попробуйте рисовать прямоугольник внутри границ и видеть.

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

Вы увидите прямоугольник. Но как я могу решить эту проблему? Поскольку на большинстве мониторов не работает 5000px на 5000px, вы работаете с меньшими разрешениями и, следовательно, с меньшими координатами или используете камеру. Имея камеру, вы можете иметь такой большой мир, какой хотите, и иметь возможность передвигаться по нему. Но если ваш фрейм может отображать только 100 пикселей, а ваш многоугольник 1000 пикселей, мы увидим только 10%, эту проблему можно легко решить с помощью zooming. Вот topic как реализовать gamecamera. С помощью gameCamera вы можете просто вычислить центр своего изображения, а затем перевести его довольно просто. Если вам нужна помощь, просто спросите.

Рамка размером 250x250 довольно маленькая, считайте ее немного больше. Также зачем устанавливать координаты как (20, 20)? Если вы хотите центрировать JFrame на текущий монитор, просто позвоните:

frame.setLocationRelativeTo(null); 
+0

Спасибо за сообщение. Это была команда перевода, в которой я нуждался. –

+0

Добро пожаловать, не стесняйтесь принять ответ, чтобы отметить, что вы решили проблему :) – Squiddie

 Смежные вопросы

  • Нет связанных вопросов^_^