JavaGUI和jpanel tut

时间:2015-08-11 12:51:37

标签: java swing jpanel layout-manager

我试图在不使用任何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);            
   }        
}

2 个答案:

答案 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)中,其中变量的第一个单词是小写的,所有其他单词都是大写的。