将JPanel添加到CENTER

时间:2016-07-24 08:40:13

标签: java user-interface jframe jpanel

我目前正在阅读Head First Java关于制作GUI的第12章。他们刚刚提到JFrame分为中心,北部,南部,东部和西部。然后,本书使用2参数add()方法将指定的组件添加到具有该JFrame的指定区域。

我可以将JButton添加到五个区域中的每个区域。我还可以使用JButton将我自己的JPanel添加到中心区域。但是当我尝试将JPanel添加到除中心以外的任何区域时,JPanel不会出现。

在过去的一小时里,我真的在网上和Stack Overflow上进行了搜索,但我没有发现任何提到将JPanel添加到JFrame中心以外的任何区域的内容。所以我的问题是:是否可以将JPanel添加到JFrame的北,南,东或西区域?

提前感谢任何可以帮助我的人。

以下是我一直试图在北部地区使用JPanel运行的代码:

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.BorderLayout;

public class StackQ {

    JFrame frame;

    public static void main(String [] args) {

        StackQ gui = new StackQ();
        gui.go();

    }

    public void go() {
        frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JButton button = new JButton("location test");
        JButton button2 = new JButton("location test");
        JButton button3 = new JButton("location test");
        JButton button4 = new JButton("location test");

        myDrawPanel custom = new myDrawPanel();

        frame.getContentPane().add(button, BorderLayout.CENTER);
        frame.getContentPane().add(button2, BorderLayout.EAST);
        frame.getContentPane().add(button3, BorderLayout.WEST);
        frame.getContentPane().add(button4, BorderLayout.SOUTH);

        frame.getContentPane().add(custom, BorderLayout.NORTH);

        frame.setSize(300,300);
        frame.setVisible(true);
    }

}

class myDrawPanel extends JPanel {

    public void paintComponent(Graphics g) {

        int red = (int) (Math.random() * 255);
        int green = (int) (Math.random() * 255);
        int blue = (int) (Math.random() * 255);

        Color random = new Color(red, green, blue);
        g.setColor(random);
        g.fillOval(20,20,100,100);

    }
}

2 个答案:

答案 0 :(得分:2)

可能更清楚,但BorderLayout文档中描述了这一点:

  

组件根据其首选尺寸和容器尺寸的限制进行布局.... CENTER组件可以水平和垂直拉伸以填充剩余的空间。

换句话说,CENTER组件将被拉伸(如果需要)以填充应用程序,并且任何其他组件需要指定preferred-size以便从{{{{}}中获取一些组件。 1}}。

默认情况下,

CENTER指定首选大小,具体取决于按钮的内容。另一方面,JButton不是 - 它的首选大小取决于其内容,而JPanel没有任何内容,因此其首选大小为零。

简而言之,为JPanel指定首选尺寸,而JPanel会尝试为面板分配至少那么多空间。

答案 1 :(得分:0)

对于这篇文章的任何潜在的未来观众来说,为了获得理想的结果,我首先在StackQ类的最顶层导入了Dimension类(这是必需的,因为后来在go中使用了setPreferredSize()方法( )方法接受Dimension类型的参数:

import java.awt.Dimension;

然后我在myDrawPanel类实例化后立即将此代码添加到go()方法中:

Dimension dims = new Dimension(1366, 200);
custom.setPreferredSize(dims);

我选择1366作为宽度,因为我的屏幕有多大。

感谢大家的帮助!