JavaGUI和jpaneltut

JavaGUI和jpaneltut,java,swing,jpanel,layout-manager,Java,Swing,Jpanel,Layout Manager,我试图在jframe中插入一个jpanel,而不使用任何netbeans拖放方法。我遇到的问题是,当我给Jpanel指定一种特定的颜色时,整个JFrame都会使用相同的颜色。请帮我解决这个问题 这是我的代码: package lookandfeel; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Component; import javax.swing.*; public class Lookand

我试图在jframe中插入一个jpanel,而不使用任何netbeans拖放方法。我遇到的问题是,当我给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);            
   }        
}
P1(顺便说一句,最好用小写字母命名变量)填充整个内容窗格(因为它被添加到内容窗格中,默认布局是BorderLayout,它试图填充所有可用空间)

So
P1.setSize(300200)无效

P1(顺便说一句,最好用小写字母命名变量)填充整个内容窗格(因为它被添加到内容窗格中,默认布局是BorderLayout,它试图填充所有可用空间)


So
P1.setSize(300200)是徒劳的

试图用给定的组件填充JFrame中的所有可用空间。由于您只有一个JPanel,因此该面板将填充整个空间

除非另有说明,否则BorderLayout是所有JFrame的默认布局

以上链接将为您提供不同布局及其操作方式的可视化表示。如果您注意到,页面顶部的边框布局在窗口中完全没有空间了——所有的空间都被按钮占据了。同样的事情也发生在你的JPanel上

您可以在JFrame上使用setLayout方法覆盖默认布局,例如:

window.setLayout(new GridLayout(0,2));

如前所述,应该是camelCase(或mixedCase),其中变量的第一个字是小写的,所有其他字都是大写的

BorderLayouts试图用给定的组件填充JFrame中的所有可用空间。由于您只有一个JPanel,因此该面板将填充整个空间

除非另有说明,否则BorderLayout是所有JFrame的默认布局

以上链接将为您提供不同布局及其操作方式的可视化表示。如果您注意到,页面顶部的边框布局在窗口中完全没有空间了——所有的空间都被按钮占据了。同样的事情也发生在你的JPanel上

您可以在JFrame上使用setLayout方法覆盖默认布局,例如:

window.setLayout(new GridLayout(0,2));

如前所述,应该是camelCase(或mixedCase),其中变量的第一个字是小写的,所有其他字都是大写的

默认情况下,
JFrame
的布局是边框布局,而
window.add(p1)
将此面板设置在框架的中心。这意味着框架容器上的面板是唯一可见的部分。默认情况下,
JFrame
的布局是边框布局,
窗口。添加(p1)
将此面板设置在框架的中心。这意味着唯一可见的部分是框架容器上的面板。感谢您的回复,但对于P1,我给出了深灰色,而对于JFRAME,我给出了青色,为什么整个窗口变暗grey@potuyashwanth:Stanislav解释了原因——您的JPanel填充JFrame,因为您正在使用默认BorderLayout.CENTER位置的contentPane将其添加到JFrame的BorderLayout。(他的答案是1+)。您不想设置GUI组件的大小,而是让布局管理器为您设置,或者在特殊情况下覆盖
getPreferredSize()
。您可能还希望使用不同的JPanel组合,每个组合使用自己的布局管理器,以实现所需的布局。谷歌Swing layout manager教程,让他们看看。感谢您的回复,但对于P1,我给出了深灰色,而对于JFRAME,我给出了青色,为什么整个窗口变暗grey@potuyashwanth:Stanislav解释了原因——您的JPanel填充JFrame,因为您正在使用默认BorderLayout.CENTER位置的contentPane将其添加到JFrame的BorderLayout。(他的答案是1+)。您不想设置GUI组件的大小,而是让布局管理器为您设置,或者在特殊情况下覆盖
getPreferredSize()
。您可能还希望使用不同的JPanel组合,每个组合使用自己的布局管理器,以实现所需的布局。谷歌Swing布局管理器教程,让他们看看。