我试图在不使用任何netbeans拖放方法的情况下在jframe中插入jpanel。我遇到的问题是当我给Jpanel一个特定的颜色时,相同的颜色会粘附到整个JFrame上。请帮我解决这个问题。
这是我的代码:
package lookandfeel;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import javax.swing.*;
public class LookandFeel {
public static void main(String[] args) {
JFrame window =new JFrame();
JPanel P1=new JPanel();
window.add(P1);
window.setExtendedState(window.MAXIMIZED_BOTH);
window.setResizable(false);
P1.setSize(300, 200);
// window.setLayout(new BorderLayout());
// window.add(P1, BorderLayout.CENTER);
for (Component comp:window.getContentPane().getComponents()) {
if (comp == P1) {
comp.setBackground(Color.DARK_GRAY);
}
else {
comp.setBackground(Color.red);
}
}
window.setUndecorated(true);
window.setVisible(true);
window.getContentPane().setBackground(Color.CYAN);
}
}
答案 0 :(得分:3)
P1(顺便说一下,将变量命名为小写)更好地填充整个内容窗格(因为它已添加到内容窗格中,默认布局是BorderLayout,它试图填充所有可用空间)。
所以P1.setSize(300, 200);
是徒劳的
答案 1 :(得分:1)
BorderLayouts尝试使用给定的组件填充JFrame中的所有可用空间。由于您只有一个JPanel,该面板填充整个空间。
BorderLayout是所有JFrame的默认布局,除非另有说明。
Click here to see a visual of different Layouts.
以上链接将为您提供不同布局及其运作方式的直观表示。如果你注意到,页面顶部的BorderLayout在窗口中完全没有空间 - 它们都被按钮占用。你的JPanel也会发生同样的事情。
您可以使用JFrame上的setLayout方法覆盖默认布局,例如:
window.setLayout(new GridLayout(0,2));
如前所述,variable naming conventions for Java应该在camelCase(或mixedCase)中,其中变量的第一个单词是小写的,所有其他单词都是大写的。