Tag: jlayeredpane

如何在不裁剪的情况下旋转缓冲图像? 有没有办法旋转JLayeredPane或JLabel?

我搜索过它,但我没有得到直接的回答。 我想要一个缓冲的图像被旋转但没有裁剪我知道新的尺寸将是这样的事情 int w = originalImage.getWidth(); int h = originalImage.getHeight(); double toRad = Math.toRadians(degree); int hPrime = (int) (w * Math.abs(Math.sin(toRad)) + h * Math.abs(Math.cos(toRad))); int wPrime = (int) (h * Math.abs(Math.sin(toRad)) + w * Math.abs(Math.cos(toRad))); 为我提供一种方法。 BTW有没有办法用ImageIcon旋转JLabel ? 意图:添加到面板和分层窗格,并将其保存到文件(保存分层窗格)。 或者我们可以旋转分层窗格吗?

Java Swing:从与JLayeredPane中的其他JPanel重叠的JPanel清除自定义绘图

我有一个JLayeredPane包含三个JPanels,其中两个重叠,我正在绘制形状。 重叠的两个JPanel中的一个需要将所有绘制的形状清除,而不会影响绘制到其下的JPanel的形状,从屏幕上消失。 目前我正在使用这样的东西: Graphics g = pane2.getGraphics(); g.clearRect (0, 0, 1000, 1000); 但这不仅清除了绘制到pane2的所有内容,还清除了下面的pane1。 所以我的问题是:有没有办法清除绘制到一个JPanel的所有内容而不影响任何绘制到JPanel下的内容?

JMenuItems在JLayeredPane中绘制更高的组件

我在JLayeredPane的一层上的JPanel中有一组JMenuItems,在更高层上的JPanel中绘制了一个模拟的游标。 当菜单项重新绘制时,它们会在模拟光标上绘制(不会触发光标图层的重绘)。 有趣的是,如果我用JButtons或JLabel代替菜单项,每次重新绘制菜单项时都会正确绘制光标。 如何确保重新绘制菜单项会导致较高层的受影响区域重新绘制,而不直接在分层窗格上调用repaint()? 我所描述的情况与现实有些简化:菜单项可能深深地嵌套在分层窗格的子项中,并且它们根本不应该知道分层窗格。 这是一段伪代码,说明了我所描述的内容: public void initGui(Dimension size) { JLayeredPane layeredPane = new JLayeredPane(); layeredPane.setSize(size); menuPanel = new JPanel(); menuPanel.setSize(size); layeredPane.add(menuPanel, BOTTOM_LAYER); JPanel cursorPanel = new CursorPanel(); cursorPanel.setSize(size); layeredPane.add(cursorPanel, TOP_LAYER); } public void showMenu(Component[] menuItems) { JPanel menu = new JPanel(); for (Component c: menuItems) menu.add(c); menuPanel.add(menu); }

在JLayeredPane中使用GridBagLayout

我试图在JPanel的右上角有一个小的浮动“小部件”。 它是一个固定大小的组件 – 如果有帮助的话,可以考虑谷歌地图中的指南针。 我意识到JLayeredPane只对所有层使用一个布局管理器,因此认为使用GBL成功: – 使右上角(1,0)框非常小并将窗口小部件放在那里 – 使内容面板具有宽度/身高2 但经过实验,似乎GBL在重叠时会删除一些组件。 任何人都可以建议一种伪造这种行为的方法吗?

JLabel和JLayeredPane – 如何在另一张图像上显示图像?

我尝试在java中创建一个小游戏,但我遇到了麻烦。 当我绘制地图时,我无法在不覆盖正方形的标题集的情况下显示字符。 我的目标是能够在同一个方块上显示许多图片(如草的标题集,角色和树),所以我必须处理我的图片的透明度(这不是问题)和图层(这是问题)。 那么如何在另一张图像上显示图像呢? 如何向java解释我需要在另一个图像上或下面显示此图像? 这是我的源代码。 我不知道是不是可以帮到你。 如果你给我一个能够管理图层的线索或function,你的帮助对我来说真的很有帮助。 对我来说重写所有代码没用.x)这个程序不完整,我只用它来测试我的程序。 我知道他刷了两次地图,所以他覆盖了角色的方格(他还有很多其他的小故障),但这不是我问题的目的。 我尝试一步一步完成我的游戏! import javax.swing.JFrame; import javax.swing.ImageIcon; import javax.swing.JLabel; import javax.swing.SwingUtilities; public class Window extends Thread { private static JFrame window = new JFrame(“game”); public void run() { Map map = new Map(); Characters characters = new Characters(); window.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); window.setSize(Settings.sizeX, Settings.sizeY); window.setLocationRelativeTo(null); window.setResizable(false); window.setVisible(true); map.start(); […]

使JButton重叠

我正在Java Swing中创建一个虚拟钢琴类型程序。 我现在的钢琴键区域是一个JPanel,其水平BoxLayout包含白色JButtons作为白键。 我也想添加黑键,让它们与白键重叠。 我尝试过两种不同的方法。 一个是使用OverlayLayout。 遗憾的是,OverlayLayout管理器的在线文档并不多,而且NetBeans GUI构建器中没有该文档。 我不知道如何让它发挥作用。 我尝试的第二件事是使用JLayeredPanes。 即使在Netbeans中弄乱它之后,我似乎无法想出那个。 所以我认为我的问题非常简单。 如果有的话,在其他JButton之上添加JButton的最佳方法是什么? 或者也许有一个替代使用JButtons钢琴键? 编辑 我结合了aioobe和dacwe的代码来获得我想要的结果。 我基本上使用dacwe的z-ordering与aioobe的基本尺寸(按比例放大)和mod 7部分。 我还添加了一些变量以使事情更清晰。 这就是我现在拥有的。 import javax.swing.*; import java.awt.Color; public class Test2 { public static void main(String[] args) { JFrame frame = new JFrame(“Test”); JLayeredPane panel = new JLayeredPane(); frame.add(panel); int maxKeys = 8; int width = 60; int height […]

将JLayeredPane添加到JPanel

我正在尝试将JLayeredPane添加到JPanel,然后将图像(JLabel图标)和按钮添加到JLayeredPane,但都不显示。 我已经测试了没有按钮和分层窗格的图像,所以我知道它有效。 这是我正在使用的一些代码。 有什么我遗失或做错了吗? public class MyClass extends JPanel { private JLayeredPane layeredPane; private JLabel imageContainer = new JLabel(); private JButton info = new JButton(“i”); MyClass(ImageIcon image) { super(); this.imageContainer.setIcon(image); this.layeredPane = new JLayeredPane(); layeredPane.setPreferredSize(new Dimension(300, 300)); layeredPane.add(imageContainer, new Integer(50)); layeredPane.add(info, new Integer(100)); this.add(layeredPane); } }

如何使用JScrollPane和JLayeredPane创建钢琴

我需要在JScrollPane中使用JLayeredPane创建一个包含四个八度的虚拟钢琴,这样最初会显示一个八度音阶,并且可以水平滚动以查看其他八度音阶。 我的代码只显示一个八度音,不显示滚动条和其他八度音程。 以下代码有什么问题? class PianoLayout extends JScrollPane { public PianoLayout() { initComponents(); } private void initComponents() { JLayeredPane layer = new JLayeredPane(); //ScrollableLayeredPane layer = new ScrollableLayeredPane(); layer.setSize(1120,150); JButton[] keys = new JButton[48]; int keyIndex = 0, i; for(i=0;i<28;i++) { keys[keyIndex] = createWhiteKey(i); layer.add(keys[keyIndex], 0, -1); keyIndex+=1; if(i%7!=2 && i%7!=6) { keys[keyIndex] = createBlackKey(i); layer.add(keys[keyIndex], […]

带有LayoutManager的JLayeredPane

情况:绘制一堆扑克牌,就像在纸牌游戏中一样。 很好地堆积。 为此,我将JLayeredPane与LayoutManager接口的自定义实现结合使用。 使用自定义LayoutManager的原因是堆栈方向不同,有时候扑克牌完全相互覆盖,有时是部分覆盖,这个逻辑对于LayoutManager来说似乎是一个很好的工作,因为这基本上归结为设置的位置。牌。 因此, LayoutManager负责设置堆栈中所有组件的X坐标和Y坐标。 另一方面, JLayeredPane负责其Z坐标(通过其层)。 将组件添加到JLayeredPane是这样的: JLayeredPane pane = new JLayeredPane(); pane.setLayout(new StackLayout(…)); pane.add(new CardView(…), new Integer(j)); 其中new Integer(j)是卡的一层。 由于JLayeredPane的合同,这必须是Integer 。 这里的问题是,由于上述原因,我的StackLayout不能有任何其他约束对象而不是Integer 。 LayoutManager接口要求您实现以下方法: addLayoutComponent(Component comp, Object constraints); 并且传递的Object将始终为Integer 。 在我的特殊情况下,我很幸运,因为我的XY坐标可以根据Z坐标计算。 例如,层k的卡必须位于Y坐标k * offset 。 所以在我的情况下,约束对象是一个Integer不是问题。 我想知道当Z坐标和XY坐标之间没有相关性时你应该做什么? 你怎么解决这个问题呢? 例如,我如何将GridBagLayout与JLayeredPane结合使用,其中第一个需要GridBagConstraints对象,第二个需要Integer对象? 当然,GBL将以组件不重叠的方式布局,但这只是想法。

行没有出现在JDesktopPane上

我想在两个JPanel之间画线,但是line不出现在layeredPane上。 这就是我所做的,请仔细阅读,编译。请尝试更正此代码。 我试过这种方式在内部框架上绘制线条,但它不适用于JPanels。 package build; import java.awt.BasicStroke; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.EventQueue; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Point; import java.awt.event.MouseEvent; import java.awt.event.MouseMotionAdapter; import javax.swing.JFrame; import javax.swing.JLayeredPane; import javax.swing.JPanel; import javax.swing.UIManager; import javax.swing.UnsupportedLookAndFeelException; import javax.swing.border.LineBorder; public class LinkLayerPane1 { public static void main(String[] args) { new LinkLayerPane1(); } public LinkLayerPane1() { EventQueue.invokeLater(new Runnable() […]