java - JLayeredPane 组件旁边的白色背景

标签 java swing jlayeredpane

在这里尝试分层 Pane ,但遇到了问题。我有两个 JPanel。我将它们都添加到 JLayeredPane 中 - panel1 足够大,可以占据整个空间,而 panel2 较小,并且使用 FlowLayout 居中。问题是,使用JLayeredPane,当我添加它时,panel2 旁边的背景似乎被漆成白色。这是一张图片来说明。 panel1 为蓝色,panel2 为红色:

正如您所看到的,panel1 的底部仍然是绘制(paint)的,但由于某种原因,侧面只是白色的。 panel2 宽 700 像素并居中,而框架宽 800 像素,所以这绝对不是问题。这是整个类(class):

import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import javax.swing.JFrame;
import javax.swing.JLayeredPane;
import javax.swing.JPanel;

public class Errortest extends JFrame {

    public static void main(String[] args) {
        //Creating frame and setting the JLayeredPane as contentpane
        Errortest frame = new Errortest();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JLayeredPane pane = new JLayeredPane();
        pane.setLayout(new FlowLayout(FlowLayout.CENTER, 0, 0));
        pane.setPreferredSize(new Dimension(800,600));
        frame.setContentPane(pane);
        frame.pack();

        //Creating panels
        JPanel panel1 = new JPanel();
        panel1.setPreferredSize(new Dimension(800,600));
        panel1.setBackground(Color.BLUE);        
        JPanel panel2 = new JPanel();
        panel2.setPreferredSize(new Dimension(700,500));
        panel2.setBackground(Color.RED);       

        pane.add(panel1, new Integer(0));
        pane.add(panel2, new Integer(1));

        frame.setVisible(true);        
    }
}

希望这不会太令人困惑。据我所知,白色背景来自 JFrame 本身,因为当我执行 frame.setBackground(Color.YELLOW); 时,它会变成黄色。

最佳答案

如果将组件添加到 JLayeredPane,就像使用容器将其添加到空布局:您必须完全指定组件的大小和位置。

import java.awt.*;
import javax.swing.*;

public class ErrorTest extends JFrame {

    public static void main(String[] args) {
        // Creating frame and setting the JLayeredPane as contentpane
        ErrorTest frame = new ErrorTest();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JComponent pane = new JLayeredPane();
        //pane.setLayout(new FlowLayout(FlowLayout.CENTER, 0, 0));  // Take out FlowLayout
        pane.setPreferredSize(new Dimension(800, 600));
        frame.setContentPane(pane);

        // Creating panels
        JPanel panel1 = new JPanel();
        panel1.setBackground(Color.BLUE);
        panel1.setBounds(0, 0, 800, 600);  // <<<---- Set Bounds

        JPanel panel2 = new JPanel();
        panel2.setBackground(Color.RED);
        panel2.setBounds(50, 0, 700, 500); // <<---- Set Bounds 

        pane.add(panel1, new Integer(1));
        pane.add(panel2, new Integer(2));

        frame.pack();
        frame.setVisible(true);

    }
}

enter image description here

关于java - JLayeredPane 组件旁边的白色背景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21028551/

相关文章:

java - 使用分层面板的 JLabel 上方的 JPanel

java - 如何将一个事件从一个按钮连接到另一个按钮?

java - 数据库选择与 java util 日期

java - 如何通过代码最大化 JFrame?

java - 在没有事件的情况下获取鼠标左键状态

java - 如何在mouseDragged事件下的DRAG_LAYER上添加JLabel

java - 如何从正在运行的 webapp 重启 tomcat?

java - 谷歌从不同的帐户登录在应用程序中崩溃

java - JPanel 上的永久背景图像

java - 重叠两个 JButton : Issue