Tag: zoom

mapView不推荐使用方法getZoomControls?

我正在尝试将默认缩放控件显示在google mapView上。 我在看这段代码。 但是不推荐使用getZoomControls()。 我正在尝试使用setBuiltInZoomControls,但是我遇到了错误; 当我调试时,例外是; java.lang.RuntimeException: Unable to start activity ComponentInfo{com.test.maptab2/com.test.maptab2.MapTabView}: java.lang.NullPointerException 02-05 09:49:21.239: W/dalvikvm(357): threadid=1: thread exiting with uncaught exception (group=0x4001d800) 02-05 09:49:22.616: E/AndroidRuntime(357): FATAL EXCEPTION: main 02-05 09:49:22.616: E/AndroidRuntime(357): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.test.mapintab/com.test.mapintab.MapInTabActivity}: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.test.mapintab/com.test.mapintab.MapInTabActivity}: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.test.mapintab/com.test.mapintab.MapInTabActivity}: java.lang.RuntimeException: Unable to start activity […]

“缩放”后的JScrollPane setViewPosition

我这里的代码是使用MouseAdapter来监听用户在他们想要放大的图像区域周围“绘制”一个框,并计算框与图像的比例。 然后它将图像调整为计算的比例。 这部分有效。 我遇到的问题是,在调整图像大小后,JScrollPane视图看起来好像仍处于同一个左上角位置。 我已经尝试了几种方法似乎已经接近我想要的结果但不完全正确。 这是侦听器,它找到比例并设置位置: import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.Graphics; import java.awt.Point; import javax.swing.JScrollPane; import javax.swing.JViewport; import javax.swing.JComponent; public class DynamicZoom extends MouseAdapter { private Point start; private Point end; private double zoom = 1.0; private JScrollPane pane; private JViewport port; public void mousePressed(MouseEvent e) { if(e.getButton() == MouseEvent.BUTTON1) { this.pane = (JScrollPane)e.getSource(); […]

使用仿射变换放大

我正在使用JAVA swing开展个人项目。 该项目是关于在窗口上绘制地图。 地图可以使用仿射变换进行缩放。 我在这里遇到的问题是每当我放大或缩小地图时,也会移动而不是放大/缩小位于屏幕中心的地图上的点 private void updateAT() { Dimension d = panel.getSize(); int panelW = d.width; int panelH = d.height; Rectangle2D r = regionList[0].get(“Victoria”).getShape().getBounds2D(); scaleX = (panelW/r.getWidth()) * zoom; scaleY = (panelH/r.getHeight()) * zoom; AffineTransform goToOrigin = AffineTransform.getTranslateInstance(-r.getMinX(), -r.getMinY()); AffineTransform pan = AffineTransform.getTranslateInstance(panX, panY); AffineTransform scaleAndFlip = AffineTransform.getScaleInstance(scaleX, -scaleY); //AffineTransform mirror_y = new AffineTransform(1, […]

在Java Swing中缩放JPanel

我有一个现有的Java Swing应用程序。 在应用程序的中间是一个JPanel ,我希望能够zoom in and out 。 JPanel上有许多JComponents (主要是其他JPanels和JLabels )。 此外, mouse位置也需要适当调整 – 因此即使在缩放JPanel之后mouse也需要保持相同。 因此,简单地改变每个component的paint方法似乎不合理。 编辑: 好吧,我有点使用MagnifierUI class进行一些小编辑。 然而,我创建的放大面板有错误的鼠标事件 – 即面板缩放, mouseevents不是。

JComponent JPanel缩放,平移和坐标问题

我有一个带有矢量图像的JPanel ,用户可以缩放和平移。 覆盖此图像是一个(透明) JComponent ,我允许用户注释底层图像。 这在全尺寸下工作得很好,但如果我使用AffineTransform放大,则叠加坐标也会受到影响。 因此,如果用户在图像上绘制一个框,则该框也会缩放。 有关如何解耦此行为的任何建议? 那么JComponent不会受到JPanel的AffineTransform ?

如何在不移动中心的情况下放大JPanel:数学还是Swing?

我正在尝试使用Swing制作可缩放的地图。 该地图是JScrollPane中的JPanel。 放大时,地图会更改大小,而paint()会将元素绘制在不同的位置。 一切都很好。 但是,ScrollPane在增加图像大小时没有更改视口,因此放大始终会将我正在查看的元素移出屏幕。 我尝试使用scrollRectToVisible()来解决这个问题,但是我没有设法为矩形获得正确的坐标,因为我在做几何体时失败了,或者因为我不太了解Swing。 这是我有的: public class MapPanel extends JPanel { […] public void setZoom(double zoom) { // get the current viewport rectangle and its center in the scaled coordinate system JViewport vp = (JViewport) this.getParent(); Rectangle rect = vp.getViewRect(); Point middle = getMiddle(rect); Dimension dim = rect.getSize(); // zoom in scaler.setZoom(zoom); setPreferredSize(scaler.transform(dim)); […]

JScrollPane – 相对于鼠标位置进行缩放

我需要在放大图像时计算视口的新位置。 UI构建如下: ImagePanel绘制图像 ImagePanelWrapper是围绕imagePanel的JPanel JScrollPane包含ImagePanelWrapper 放大或缩小时,ImagePanel的缩放系数会发生变化,并且会重新计算ImagePanel的首选大小。 因此,即使ImagePanel停留在相同的视口点,此面板上的图像也会移动。 当用户按住CTRL并使用鼠标滚轮时,将调用以下方法。 给定的点是MouseWheelListener提供的光标位置。 通过这些方法的function,当放大或缩小时,图像已经停留在相同的左上角位置。 问题是我只是想弄清楚如何相对于鼠标移动,例如Paint.NET。 有任何想法吗? /** * */ public void zoomOut(Point point) { this.imagePanel.setZoom(this.imagePanel.getZoom() * 0.9f); Point pos = this.getViewport().getViewPosition(); int newX = (int) (pos.x * 0.9f); int newY = (int) (pos.y * 0.9f); this.getViewport().setViewPosition(new Point(newX, newY)); this.imagePanel.revalidate(); this.imagePanel.repaint(); } /** * */ public void zoomIn(Point point) { […]

JFreeChart:数据在缩放和平移后消失

我有一个JFreeChart时间序列图表,它显示了一个TimePeriodValuesCollection。 数据集包含两个间隔。 数据显示正确,我可以平移(使用Ctrl-拖动)视图。 问题是如果我放大,并且我在缩放视图中向右平移视图,第二个间隔在第一个间隔不再可见后突然消失。 如果只有一个间隔,或者如果我不放大,一切都还可以。 有什么想法吗? SSCCE: public class DisappearingTest { public static final SimpleDateFormat oracleDateFormat = new SimpleDateFormat(“yyyy-MM-dd”); public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { @Override public void run() { buildFrame(); } }); } private static void buildFrame() { JFrame f = new JFrame(“Test”); f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); JPanel chartPanel = null; try { chartPanel […]

通过JLayer和LayerUI缩放JLayeredPane

在Stack Overflow问题上已经提出,在Swing应用程序中实现缩放的最佳方法是通过Java 7提供的JLayer装饰器。 我一直在关注Oracle教程并认为最好的方法是创建我自己的ZoomUI来扩展LayerUI 。 到目前为止,我的想法是这个类将有一个zoom成员变量,在绘制实际组件之前应用它。 然后我可以使用这个相同的类来捕获鼠标事件并将它们发送到未缩放的坐标。 我在第一步遇到一些麻烦,无法理解为什么g2.scale(zoom, zoom)调用在我的SSCCE下面没有效果。 import javax.swing.*; import javax.swing.plaf.LayerUI; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseEvent; public class Demo { public static void main(String args[]) { EventQueue.invokeLater(new Runnable() { @Override public void run() { JFrame frame = new JFrame(); frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); final JLayeredPane panel = new JLayeredPane(); final ZoomUI layerUI = […]

使用鼠标和图形缩放

我在JComponent中绘制一些曲线等,使用Graphics G(非2D)。 现在我想使用鼠标的滚轮来放大和缩小。 任何曲目? 我听说过BuferredImage?