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

(希望你能看到方块G6在标签上有一个绿色边框,显示哪个方块被选中)
但是当我将我的 2 SidePanels添加到我的ChessBoard面板,然后在顶部有另一层标签应该完全覆盖每个板块但它没有:

如您所见,围绕块的绿色边框G2已关闭。
当我将SidePanels添加到sChessBoard并将其添加到底层并将其大小设置为 600x600时,我已将其缩小到明显的范围,然后添加顶层,它是将完全适合块的标签ChessBoard,以及绿色边框围绕选定的JLabel(以及下方的ChessBoard方块 [黑色或白色])绘制,由于SidePanels 减少了棋盘的实际大小为 600x600,因此它偏离中心绘制,现在它将是600-sp1.getWidth()x 600-sp2.getHeight()。我尝试设置顶层的边界和首选大小来补偿它,但似乎没有用。任何帮助表示赞赏谢谢:
ChessBoardTest.java:
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.HashMap;
import javax.swing.*;
import javax.swing.border.BevelBorder;
public class ChessBoardTest {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
Dimension boardSize = new Dimension(600, 600);
JFrame frame = new …Run Code Online (Sandbox Code Playgroud) 我有一个JScrollPanel包括一个大面板,它自己包括3个内板.我想把一个面板(例如)放在一个特殊的地方,以便始终可以看到,我的意思是用户可以滚动到任何想要的地方,但该面板始终位于其他组件的顶部,并且不会移动.我尝试过这样做,JLayeredPane但我做不到.我该怎么办?
我很好奇为什么在JLayeredPane上调用setBackground(Color)似乎并没有真正设置背景颜色.我猜它与JLayeredPane有某种关系因为某些原因必须有透明背景?无论如何,这里有一些显示问题的代码.这是在Mac上,所以我相信它正在使用OSX LAF.此图像显示了此结果.
import java.awt.Color;
import java.awt.Dimension;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JLayeredPane;
import javax.swing.JPanel;
public class Main {
public static void main(String[] args) {
// This should be done with Swing Utilities, but I wanted to keep this
// simple...
JFrame foo = new JFrame();
foo.setSize(new Dimension(500, 500));
JLayeredPane bar = new JLayeredPane();
bar.setPreferredSize(new Dimension(200, 200));
bar.setBackground(Color.red);
// If you comment out the following line, you don't see any indication
// the JLayeredPane is actually being …Run Code Online (Sandbox Code Playgroud) 我正在尝试将一个JPanel(好吧,几个)添加到JLayeredPane.但是,当我这样做时,JPanel的paint组件方法似乎没有任何效果.下面是一个例子:
import javax.swing.*;
import java.awt.*;
public class Example {
public static void main(String[] args) {
// This Works as expected
JFrame usingPanel = new JFrame();
JPanel p = new JPanel();
p.add(new BluePanel());
usingPanel.setContentPane(p);
usingPanel.pack();
usingPanel.setVisible(true);
// This makes the frame but does not paint the BluePanel
JFrame usingLayer = new JFrame();
JLayeredPane l = new JLayeredPane();
l.setPreferredSize(new Dimension(200,200));
l.add(new BluePanel(), JLayeredPane.DEFAULT_LAYER);
JPanel p2 = new JPanel();
p2.add(l);
usingLayer.setContentPane(p2);
usingLayer.pack();
usingLayer.setVisible(true);
}
static class BluePanel extends JPanel{
public BluePanel(){
setPreferredSize(new Dimension(200,200)); …Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个具有JLayeredPane自动缩放的应用程序,其大小与父级一样JFrame(这是BorderLayout在框架内容窗格中使用布局管理器的简单部分).困难的部分是我希望JLayeredPane自动调整大小的内容JLayeredPane(因此也是JFrame如此).
事实上,我想要实现的功能很像Netbeans中的可停靠控制台,就像点击时编辑器的"顶部"一样,当被解除时再次隐藏并停靠在状态栏中的"控制台"字中.显然,我还希望调整行为以正常工作.实现这一目标的最佳方法是什么(如果没有JLayeredPane)?
我似乎遇到了一些重大问题JLayeredPane.我有一个BorderLayout()窗格,我希望西侧元素包含一些JLayeredPane在彼此之上,所以我可以在它们之间切换以显示正确的信息.
西部窗格应为200像素宽,并且应该与总窗口一样长.在我的示例代码中,我添加了两个图层JLayeredPanel,但它们没有显示.它们应该在西部窗格中.
这是我的代码:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JLayeredPane;
import javax.swing.JPanel;
public class Main {
private static JFrame mainFrame = new JFrame();
private static JPanel mainPane = new JPanel();
public Main(){}
public static void initGui(){
JLayeredPane westPanel = new JLayeredPane();
westPanel.setPreferredSize(new Dimension(200,0));
westPanel.setBackground(Color.blue);
JPanel layerOne = new JPanel();
layerOne.add(new JLabel("This is layer 1"));
westPanel.add(layerOne, new Integer(0), 0);
JPanel layerTwo = new JPanel();
layerTwo.add(new JLabel("This si layer 2"));
westPanel.add(layerTwo, …Run Code Online (Sandbox Code Playgroud) 我在JLayeredPane中添加了两个组件.
1. JWebBrowser
2. JPanel
我在不同的层中添加了JWebBrowser和JPanel.JWebBrowser在0层,即底层,JPanel在第1层.
m_LayeredPane.setLayer(m_WebBrowser, JLayeredPane.DEFAULT_LAYER);
m_LayeredPane.add(m_WebBrowser);
m_LayeredPane.setLayer(m_WebCamPane, JLayeredPane.PALETTE_LAYER);
m_LayeredPane.add(m_WebCamPane);
Run Code Online (Sandbox Code Playgroud)
现在的问题是JWebBrowser层与JPanel层重叠.
我尝试了各种各样的东西,比如moveToFront()方法,在运行时定义位置,将两个组件放在同一层并使用componentZorder等.但问题仍然是一样的.
我不确定是什么导致JPanel层返回JWebBrowser层.
我有一个 JLayeredPane。我的程序是这样工作的:
JPanel p1 = new JPanel(new BoxLayout(p1, BoxLayout.X_AXIS));
JPanel p2 = new JPanel(new BoxLayout(p2, BoxLayout.Y_AXIS));
JLayeredPane lp = new JLayeredPane();
lp.add(p1, 1);
lp.add(p2, 0);
Run Code Online (Sandbox Code Playgroud)
p1 和 p2 都有按钮等组件...
问题是,当我将两个 JPanel 添加到 JLayeredPane 时,什么也没有出现。
我尝试更改 JLayeredPane() 的布局。
例如,我做了:
lp.setLayout(new BoxLayout(lp, BoxLayout.X_AXIS));
Run Code Online (Sandbox Code Playgroud)
然后,JPanels 确实显示,但它们显示为相邻,不尊重 JLayeredPane 的层。
我是否被迫使用空布局?
如何让我的 JLayeredPane 尊重图层并正确显示我的两个 BoxLayout JPanel?
当我给我的 JLayeredPane 一个布局时,它会显示面板,但它根本不尊重图层。
我正在尝试将多个面板添加到另一个面板。我希望它们彼此重叠,所以我正在使用JLayeredPane。我为每个按钮都添加了一个按钮。工作时应出现两个按钮。
import java.awt.Color;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLayeredPane;
import javax.swing.JPanel;
public class PanelTest {
public static void main(String[] args) {
JFrame frame = new JFrame();
JPanel mainPanel = new JPanel();
JPanel panel1 = new JPanel();
JPanel panel2 = new JPanel();
JLayeredPane layers = new JLayeredPane();
mainPanel.add(layers);
panel2.setOpaque(false);
panel1.setOpaque(false);
panel1.setVisible(true);
panel2.setVisible(true);
panel1.add(new JButton("1111111111"));
panel2.add(new JButton("2"));
frame.setContentPane(mainPanel);
layers.add(panel1, new Integer(2));
layers.add(panel2, new Integer(3));
frame.setVisible(true);
frame.setSize(500, 500);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
Run Code Online (Sandbox Code Playgroud)
仅显示mainPanel的灰色背景。我究竟做错了什么?
java ×10
jlayeredpane ×10
swing ×10
background ×1
docking ×1
java-7 ×1
jlayer ×1
jpanel ×1
jscrollpane ×1
jviewport ×1
layout ×1
transparency ×1