在这里尝试分层 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);
}
}
关于java - JLayeredPane 组件旁边的白色背景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21028551/