问题标签 [jlayeredpane]

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.

0 投票
1 回答
5761 浏览

java - 在现有的 JPanel 上绘制 JLayeredPane

我正在开发一个国际象棋游戏。我想让板容器利用 GridLayout 来显示 8x8 的 JPanel 网格。(这将使突出显示选定方块和有效移动等功能变得更加容易。)然后我想在这一层上添加碎片,以便可以拖放它们。我最初通过在单独的方形 JPanel 中绘制它们来显示这些碎片,但我认为稍后尝试拖放它们时会出现问题。从那以后,我一直在尝试使用 JLayeredPane 作为主容器,但遇到了几个问题。

一个是一旦我为 JLayeredPane 指定了 GridLayout,无论我使用哪个 Integer 来指定要向其中添加 JLabel 或其他类型的图像的层,这些片段都会被添加到网格中,从而设置它们的位置并扭曲整个董事会。我读过使用 LayoutManagers 会干扰 JLayeredPane 上的图层定位,所以这并不奇怪。(尽管 JLayeredPane 教程中的 Oracle 演示程序似乎可以做到这一点:http: //download.oracle.com/javase/tutorial/uiswing/examples/components/LayeredPaneDemo2Project/src/components/LayeredPaneDemo2.java

但是,我也尝试将 JPanel 的网格放入它自己的 JPanel,然后将其添加到 JLayeredPane 的低层,我的想法是我可以将拖放图标添加到单独的、不透明的 JPanel 上JLayeredPane 的层。但是,当我这样做时,在 JLayeredPane 中简单地拥有网格 JPanel 之后(即在添加拖放层之前),网格将不会显示。

我也尝试过覆盖 JLayeredPane 的 paintComponent (和paint)方法来绘制片段图像,但它们被 JPanel 隐藏(我可以通过将 JPanel 设置为非透明来看到它们确实存在)并且就我可以说没有选项可以在 JLayeredPane 上设置图形的图层。我也尝试使用框架的 glassPane 来绘制碎片,但那里也出现了不良行为。

任何帮助解释这种行为,或者我哪里出错了,将不胜感激!

0 投票
1 回答
1572 浏览

java - 在 JLayeredPane 中获取 JPanel 的焦点

我有JLayeredPane2 层

第一层是一个JPanelWrapping Image。第二层是另一个扩展JPanel名为 ResizableRectangle 并实现的对象KeyListener

我已经覆盖了该KeyPressed方法,但它没有接收到keyPressed事件并且该方法没有被调用。

我已经设置了and setFocusEnable(true)used grabFocus(),但它们都返回 false。requestFocus()requestFocusInWindows()

我发现当我在 JFrame 加载后按 Tab 键时,Focus会转到我想要的面板,并且侦听器会获取事件。

我已经添加了一个KeyListenerJLayeredPane它工作正常,但问题是我想将侦听器添加到面板而不是 layeredPane。

0 投票
2 回答
3770 浏览

java - 在 JLayeredPane 中使用 GridBagLayout

我试图在 JPanel 的右上角有一个小型浮动“小部件”。它是一个固定大小的组件 - 如果有帮助,请考虑一下 google maps 视图中的指南针。

我意识到 JLayeredPane 只对所有图层使用一个布局管理器,因此认为使用 GBL 会成功: - 使右上角 (1, 0) 框非常小并将小部件放在那里 - 使内容面板的宽度/高度 2

但是经过实验,似乎GBL在它们重叠时会删除一些组件。

任何人都可以提出一种伪造这种行为的方法吗?

0 投票
3 回答
2728 浏览

java - 如何将组件放置在现有组件正下方的 JLayeredPane 中?

我有一个 JTextField,在它的正下方我想显示一个放置在 JLayeredPane 中的 JLabel(稍后我将使用它进行自动建议)。

如何将我的 JLabel 放在 JTextField 正下方的 JLayeredPane 中?

这是我的一些代码,当前结果显示在下面的屏幕截图中:

在此处输入图像描述

第二次尝试:

在此处输入图像描述

0 投票
1 回答
2228 浏览

java - JLayeredPane 里面的 JScrollPane 没有重绘?

这可能是非常简单的事情,但我完全糊涂了。

当我在窗格中滚动时,我有一个JScrollPane内部,上面的内容根本不会重新绘制。JLayeredPaneJLayeredPane

这里我有一个小例子,注意蓝色方块根本没有被重新粉刷。

我是否完全误解了分层窗格的工作原理?

有任何想法吗?

0 投票
1 回答
1315 浏览

java - 在 JScrollPane 中显示 JLayeredPane

此代码向我显示了 scrollPane 内的波形:

这向我显示了 scrollPane 中的灰色背景:

我不知道为什么不显示波形(Waveform extends JPanel)。这是更多信息:

和输出:

0 投票
3 回答
599 浏览

java - 使 jLayeredPanes “实心”

我有一个 GUI,上面有一堆堆叠在一起的 jPanel。哪个“在顶部”由 jLayeredPane 控制。但是,当悬停在按钮和表单不在顶部时,它们变得可见且可交互。

我怎样才能使面板“实心”,即使底层组件不会“弹出”?

0 投票
2 回答
138 浏览

java - 不知道使用 JLayeredPane 时编译器错误在哪里形成

因此,在我的最后一个问题(“无法弄清楚如何在 java 中重叠图像”)中,有人建议我使用布局管理器和 JLayeredPane。但是,在研究了演示并编写了自己的代码之后,我遇到了多达 34 个编译器错误。编译器错误始终是“”,因此导入可能有问题。但是,我完全从 LayeredPane Demo 中复制了导入列表。再一次,我被难住了。也再次,我提前感谢任何人的建议!

0 投票
1 回答
4438 浏览

java - 组件分层 Java Swing,悬停时显示层

我有两个JPanels 在同一个容器中相互叠加。我正在使用container.add(jpanel, 0);container.add(otherjpanel, 1)。它工作得很好,但是为了让顶层显示我必须用鼠标悬停在组件上。

这是一些显示我的问题的可执行代码。

只需将鼠标悬停在屏幕的上部。

0 投票
0 回答
496 浏览

java - 自定义组件不会在 JLayeredPane 中绘制

我们正在用 Java 创建一些学校项目。我们想要做什么:有 JScrollPane 作为 GUI 的一部分,包含 JLayeredPane(比方说“MapPane”)。MapPane 包含国家的地图(在底部),它是带有图标的 JLabel。这很好用,MapPane 是可滚动的,一切正常。

现在,我们要添加一些扩展类 SpatialElement 的更多自定义图形元素

每个元素都扩展类 SpatialElement(简化):

因此,例如元素 Polygon 看起来像(简化):

因此,当用户添加新的图形元素时,addSpatialElement会调用一个方法(in MapPane):

我希望代码简单但足够描述性。问题是,即使将新创建的组件添加到 MapPane(扩展的 JLayeredPane)中,该元素也不会绘制。首先我认为这是由错误的边界引起的(在 updateBounds 方法中计算),但它们没关系。

如果我element.repaintComponent(getGraphics())在将其添加到 MapPane 之后直接调用,它会绘制元素,但在与 MapPane 进行任何交互(例如调整窗口大小等)之后,MapPane 会被重新绘制,因此对象不会重新绘制。

如何强制 MapPane 在调整大小时重新绘制所有包含的组件?我是否必须覆盖 MapPane 的默认 paintComponent 方法(所以我将遍历对象并在每个对象上调用 repaintComponent() )?

还是有一些更好的,不是那么棘手的解决方案怎么做?

谢谢你的建议。