问题标签 [jviewport]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 利用 Java Swing 组件显示自动滚动视图框架的微妙问题
我正在尝试使用 Java Swing 组件编写基于 GUI 的游戏应用程序。基本框架如下: AJFrame
包含 aJScrollPane
和 a JPanel
。JScrollPane
进一步包含一个JPanel
包含一个两层,JLayeredPane
它本身包含两个JPanels
。(出于好奇,这两个JPanels
对应于最上面的非透明面板的单位窗格和最下面的不透明面板的地形窗格。)
自动窗口滚动是该程序的一项功能。为了澄清,编写的代码自动指定一个适当的单元作为窗口目标,然后继续滚动可见窗口,以便在给定窗口显示的情况下尽可能靠近屏幕中心位置显示该单元约束。这个程序是我进退两难的根源。在任何给定的方法执行中,除了在重新调整窗口大小之前对方法的调用之外,该方法完全按照它应该的方式工作。该方法仅在应用程序的初始启动中无法正常运行。
我认为我的代码太长了,无法在本文的上下文中完整发布,因此我将首先仅提供处理窗口滚动的代码,然后将其他代码发布到公共 DropBox 帐户所需的代码。
我已经完成了对该方法的相当稳健的测试,我的结果如下,当应用程序最初启动时,保存在upLeftX
和中的值upLeftY
都设置为 -24。这在整个程序执行过程中是一致的。(每个都设置为负值是相当奇怪的,但它似乎足够易于管理。)但是,其中的值在scrollDest
程序的初始启动和后续运行之间会有所不同。本质上,发生的事情是代码获得了 scrollDest.x 和 scrollDest.y 的值,它们是小于 -24 的负整数。
在包含打印语句的简短示例运行之后,打印了以下结果。
scrollDest.x 和 y:-800 -336
scrollDest.x 和 y:0 0
scrollDest.x 和 y:1051 2145
scrollDest.x 和 y:1051 2145
scrollDest.x 和 y:610 -312
scrollDest.x 和 y:610 0
该行位于上述方法System.out.println("scrollDest.x and y: " + scrollDest.x + " " + scrollDest.y);
的两个语句之前和之后。if
这些值反映了程序对单元的第一次方法调用,为方便起见称为 ONE,其次是程序对板上其他单元的第二次调用,TWO,最后是方法的第三次调用一次再一次。
这种不一致是我问题的根源或反映,我还没有设计出一种可靠的方法来解决这个问题。
我很乐意回答有关澄清或详细说明的任何问题。提前感谢大家的帮助!
java - How to extends JViewport correctly?
I am trying to design a class of endless coordinate board with a grid. I have extended a JViewport
and it draws at initial position ok (inside JScrollPane
). How to tell scroll pane that there are some space to scroll in any direction?
The following does not help
UPDATE
Does anybody knows how JScrollPane determines scroll ranges from it's viewport?
UPDATE2
I found, that scrollbars appear t work if maximums and minimums are set after setVisible
called.
But unfortunately, paintConponent
does not called upon scroll.
Why?
UPDATE3
Although scroll bars work, they don't change viewport position.
Why?
java - JScrollPane 原点上方的 JScrollPane 中的图像原点
我是一个编程新手,所以如果这是一个明显的问题,请原谅我,但我正在开发一个应用程序,除其他外,构建甘特图。
我遇到的问题是其中一个面板(namesPanel)显示了相关图像,但顶部缺少大约 10 个像素。我可以通过在绘图时向 y 变量的起点添加 10 个像素来使图像看起来正确,但这感觉不对,如果有错误,我现在想将其压缩。
图表实际上是由嵌套在一个 JPanel 中的三个不同的 JScrollPanes 组成的,并用 GridBagLayout 排列:
这样做的原因是允许用户使用鼠标滚动甘特图,因此稍后将 namesPanel 和 datesPanel 的滚动条设置为与甘特图相同的 JScrollBar 实例。
然后程序继续调整所有图像的大小以节省内存 - 首先它们都设置为相同大小的原因是需要某些图形计算来设置最终图像的边界,这意味着创建一个从中获取图形对象的图像。另外,我不知道如何使图像更大:
最后,程序实际绘制了图像——我知道这个区域需要重构为子方法,但这里是:
我很难过 - 我找不到导致问题的行,我看不出我处理 namesPanel 的方式与处理其他人的方式有什么区别。更改影响图像位置和尺寸的字段也无济于事。操作 JViewport 也不行。:-(
再次道歉,如果这太长了,但我不知道要关注代码的哪个区域。
java - 仅当 JTable 适合视口时才启用自动调整大小
我需要在 JScrollPane 内创建一个带有可调整大小的列的 JTable(当用户增加列宽时 - 出现水平滚动条)。为此,我使用了table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
. 此外,当视口足够宽以包含整个表格时 - 列应拉伸以填充视口宽度。为了做到这一点,我有getScrollableTracksViewportWidth()
JTable 类的覆盖方法如下:
这种方法效果很好,除了一件事:当我第一次尝试调整列的大小时,它会返回自己的宽度到起始位置。如果我快速调整列大小并释放鼠标表继续工作良好。那么,这种行为的原因是什么?为什么即使getScrollableTracksViewportWidth()
返回 false,表格也会尝试调整大小?或者,也许,您可以提出更好的解决方案来实现这种调整大小模式?
贝娄是上述问题的一个简单的工作示例:
java - Paint my collection of geometry feature?
hello am trying to paint my feature ( collection of geometry with a specific color ) but i get this error: it's a problem with the arraylist to be casted but i don't how to fix it PLZ help me Thanks in advance
java.util.ArrayList cannot be cast to com.vividsolutions.jts.geom.GeometryCollection at com.vividsolutions.jump.workbench.ui.plugin.specific.SearchPropertiesPlugin$3.actionPerformed(SearchPropertiesPlugin.java:205) at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995) at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318) at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387) at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242) at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236) at java.awt.Component.processMouseEvent(Component.java:6297) at javax.swing.JComponent.processMouseEvent(JComponent.java:3275) at java.awt.Component.processEvent(Component.java:6062) at java.awt.Container.processEvent(Container.java:2039) at java.awt.Component.dispatchEventImpl(Component.java:4660) at java.awt.Container.dispatchEventImpl(Container.java:2097) at java.awt.Component.dispatchEvent(Component.java:4488) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4575) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4236) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4166) at java.awt.Container.dispatchEventImpl(Container.java:2083) at java.awt.Window.dispatchEventImpl(Window.java:2489) at java.awt.Component.dispatchEvent(Component.java:4488) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:668) at java.awt.EventQueue.access$400(EventQueue.java:81) at java.awt.EventQueue$2.run(EventQueue.java:627) at java.awt.EventQueue$2.run(EventQueue.java:625) at java.security.AccessController.doPrivileged(Native Method) at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87) at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:98) at java.awt.EventQueue$3.run(EventQueue.java:641) at java.awt.EventQueue$3.run(EventQueue.java:639) at java.security.AccessController.doPrivileged(Native Method) at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87) at java.awt.EventQueue.dispatchEvent(EventQueue.java:638) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161) at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
here's where he get's the exception:
//in this line:
and here's the other methods that it needs:
java - 在 JScrollPane 中滚动 JComponent
说,我有一个很大的 JComponent:
还有一个更小的 JScrollPane:
我想在 JScrollPane 中显示我的 JComponent 的一部分,如下图所示:
白色矩形是我的 JScrollPane,它当前显示从(x1,y1)到(x2,y2)的 JComponent 的一部分。
那么,我尝试了什么:
我创建了一个新的 JComponent:
并将其作为视口视图放置在 JScrollPane 中:
然后我将 JScrollPane 附加到 JFrame:
我尝试通过以下方式更改可见区域:
怎么了?
java - 我希望图片在滚动时留在 jscrollpane 的左上角
我在 JScrollpane 中有一个 JPanel。我在显示在 JPanel 上的 BufferedImage 上绘图。在 JScrollpane 的左上角,我想要一张图片,当我向下滚动查看我的 JPanel 的其余部分时,它总是停留在那个角落。这里是 Jpanel 的 paintComponent 方法:
parent.getViewPosition() 在哪里给我 scrollPane.getViewport().getViewPosition()。当我启动时,我可以看到左上角带有红色矩形的缓冲图像。当我向下滚动时,我可以看到缓冲图像的其余部分,但是红色矩形向上移动然后消失,并且当我向上滚动时不再出现。在控制台中,我可以看到滚动时点 p 发生了变化:
谁能帮我解决这个问题?
java - 滚动的 Java 鼠标位置计算区域
我不知道如何为此取一个好标题..但是我们开始吧:
我试图在单击标签时获得准确的鼠标位置,使用添加到 JScrollPane 的 JViewPort 中的 MouseAdapter 我的面板本身已添加到 JScrollPane 内。
当我尝试获取鼠标位置的坐标时,总是相对于可见的面板区域..它不计算不可见的区域,因为滚动..
我不知道如果我说清楚了,我希望如此.. 已经尝试使用来自 JViewPort 和 JScrollPane 的 getMousePosition 并且也没有工作.. 非常感谢!
这是一些代码:内部有面板的框架的构造..
java - 使用 scrolllRectToVisible 自动滚动 textArea
因此,我在滚动窗格中设置了一个 JTextArea,并使用我设置的按钮,每次单击它时,我都希望 textarea 的视图下拉一行。(所以在 JTextArea 顶部单击两次是第 3 行)。
我知道最好的方法是使用 .scrollRectToVisible(); 想法,但我真的很难执行它,因为我无法绕过它的矩形边。
希望得到任何帮助,谢谢!
java - JScrollPane 缩放视图,其中包含组件
是否有任何方法我想缩放视口的视图但内部组件的位置不会改变。设置是我在 jscrollpane 中有一个大 jpanel,我只想将视图更改为缩放模式。对象可以拖放到面板内的任何位置,因此保留其 xy 位置很重要。
这是我目前的缩放代码,我所做的是使用图形 2d 比例缩放视图。问题是位置一团糟。我还想将其缩小,以便整个面板适合 jscrollpane。
我也在考虑操纵视口。这是我的视口初始化。2000 x 1000 尺寸是面板,750 x 698 是我视口的范围大小。关于如何在不弄乱组件位置的情况下进行缩放的任何建议?也许移动 setviewposition 是解决方案的一部分?