标签: jlayeredpane

在JLayeredPane中使用GridBagLayout

我试图在JPanel的右上角有一个小的浮动"小部件".它是一个固定大小的组件 - 如果有帮助的话,可以考虑谷歌地图中的指南针.

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

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

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

java layout swing jlayeredpane gridbaglayout

3
推荐指数
1
解决办法
3557
查看次数

调整 JLayeredPane 图层的大小

我在尝试使用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)

java swing jlayeredpane jlayer java-7

3
推荐指数
1
解决办法
2174
查看次数

如何将组件置于其他组件之上?

我有一个JScrollPanel包括一个大面板,它自己包括3个内板.我想把一个面板(例如)放在一个特殊的地方,以便始终可以看到,我的意思是用户可以滚动到任何想要的地方,但该面板始终位于其他组件的顶部,并且不会移动.我尝试过这样做,JLayeredPane但我做不到.我该怎么办?

java swing jscrollpane jlayeredpane jviewport

3
推荐指数
2
解决办法
2095
查看次数

如何在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)

java swing transparency background jlayeredpane

2
推荐指数
1
解决办法
4614
查看次数

将JPanel添加到JLayeredPane会导致绘制和调整大小无效

我正在尝试将一个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)

java swing jlayeredpane

2
推荐指数
1
解决办法
3809
查看次数

JLayeredPane的自动内容大小调整

我正在尝试创建一个具有JLayeredPane自动缩放的应用程序,其大小与父级一样JFrame(这是BorderLayout在框架内容窗格中使用布局管理器的简单部分).困难的部分是我希望JLayeredPane自动调整大小的内容JLayeredPane(因此也是JFrame如此).

事实上,我想要实现的功能很像Netbeans中的可停靠控制台,就像点击时编辑器的"顶部"一样,当被解除时再次隐藏并停靠在状态栏中的"控制台"字中.显然,我还希望调整行为以正常工作.实现这一目标的最佳方法是什么(如果没有JLayeredPane)?

java swing docking layout-manager jlayeredpane

2
推荐指数
1
解决办法
3001
查看次数

Java Swing 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)

java swing jlayeredpane

2
推荐指数
1
解决办法
4564
查看次数

JLayeredPane中的组件重叠

我在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层.

java swing jlayeredpane

1
推荐指数
1
解决办法
630
查看次数

JLayeredPane 不尊重图层

我有一个 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 一个布局时,它会显示面板,但它根本不尊重图层。

java swing layout-manager jlayeredpane null-layout-manager

1
推荐指数
1
解决办法
2062
查看次数

使用JLayeredPane将多个JPanel添加到一个JPanel

我正在尝试将多个面板添加到另一个面板。我希望它们彼此重叠,所以我正在使用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 swing jpanel jlayeredpane

1
推荐指数
1
解决办法
2363
查看次数