java awt中只显示一个按钮

java awt中只显示一个按钮,java,button,awt,frame,layout-manager,Java,Button,Awt,Frame,Layout Manager,我正在尝试创建一个带有多个按钮的显示器。但是,仅显示一个按钮。为什么会这样?是布局管理器的问题吗?我哪里出错了 我的代码: import java.awt.*; class ButtonDemo extends Frame { Button[] b;Frame frame; ButtonDemo() { int i=0; b=new Button[12]; frame=new Frame(); frame.

我正在尝试创建一个带有多个按钮的显示器。但是,仅显示一个按钮。为什么会这样?是布局管理器的问题吗?我哪里出错了

我的代码:

import java.awt.*;
class ButtonDemo extends Frame 
{
    Button[] b;Frame frame;
    ButtonDemo()
    {
        int i=0;
        b=new Button[12];
        frame=new Frame();
        frame.setLayout(new BorderLayout());
        for (i=0;i<12;i++)
        {
            b[i] = new Button("Hello"+i);frame.add(b[i]);
        }
        frame.add(new Button("Hello"));
        frame.add(new Button("polo"));
        frame.pack();
        frame.setVisible(true);

    }

    public static void main(String args[])
    {
        ButtonDemo bd = new ButtonDemo();
    }
}
import java.awt.*;
类ButtonDemo扩展框架
{
按钮[]b;框架;
ButtonDemo()
{
int i=0;
b=新按钮[12];
帧=新帧();
frame.setLayout(新的BorderLayout());

对于(i=0;i这是
BorderLayout
的预期行为

BorderLayout
将只允许单个组件驻留在其5个可用位置中的每个位置

将两个按钮添加到同一位置,因此仅显示最后一个按钮

试试看

  • 将一个按钮添加到
    BorderLayout.NORTH
    BorderLayout.SOUTH
    位置
  • 使用不同的布局管理器

查看并了解更多详细信息…

首先,建议不要将组件添加到框架中,而是添加到框架的容器中。最简单的方法是将JPanel添加到框架的容器中,然后将任何后续组件添加到此JPanel中

比如说

    JFrame customFrame = new JFrame();
    JPanel customPanel = new JPanel();
    customPanel.setLayout(new BorderLayout());
    customFrame.getContentPane().add(customPanel);
    //add your buttons to customPanel
其次,您已经创建了一个自定义类ButtonDemo,它扩展了Frame,然后为什么还要在其中创建Frame?在您的情况下,您可以直接说

setLayout(new BorderLayout()); // equivalent to this.setLayout(new BorderLayout());
 add(new Button("polo"));
而不是创建单独的框架并向其添加组件/布局

您正在将框架的布局设置为BorderLayout,但未使用其任何功能

frame.setLayout(new BorderLayout());
如果你想让你的按钮在你想要的位置上(比如说北),你必须这样指定

frame.add(new Button("Hello"),BorderLayout.NORTH);

同样,如果你想在北方位置有多个按钮,那么使用带有框布局的面板(水平或垂直,根据你的要求),然后将按钮添加到面板上。

就像程序员所说的那样,这是因为
框布局
只需声明另一个布局,它就会工作:

import java.awt.*;
class ButtonDemo extends Frame 
{
    Button[] b;Frame frame;
    ButtonDemo()
    {
        int i=0;
        b=new Button[12];
        frame=new Frame();
        frame.setLayout(new BorderLayout());
        for (i=0;i<12;i++)
        {
            b[i] = new Button("Hello"+i);frame.add(b[i]);
        }
        frame.add(new Button("Hello"));
        frame.add(new Button("polo"));
        setLayout(new FlowLayout());
        frame.pack();
        frame.setVisible(true);

    }

    public static void main(String args[])
    {
        ButtonDemo bd = new ButtonDemo();
    }
}
import java.awt.*;
类ButtonDemo扩展框架
{
按钮[]b;框架;
ButtonDemo()
{
int i=0;
b=新按钮[12];
帧=新帧();
frame.setLayout(新的BorderLayout());

对于(i=0;ii如果您希望所有组件垂直或水平显示,我建议使用
BoxLayout
,否则只需使用
FlowLayout
。尽管不清楚您试图实现什么。