我正在尝试创建一个带有多个按钮的显示器。但是,只显示一个按钮。为什么会这样?它与布局管理器有关吗?我哪里出错了?
我的代码:
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();
}
}
答案 0 :(得分:3)
这是BorderLayout
的预期行为。
BorderLayout
只允许单个组件驻留在其5个可用位置中的每一个位置。
您正在向同一位置添加两个按钮,因此只会显示最后一个按钮。
...试
BorderLayout.NORTH
和BorderLayout.SOUTH
位置添加一个按钮请查看A Visual Guide to Layout Managers和Laying Out Components Within a Container了解详情......
答案 1 :(得分:1)
就像MadProgrammer
所说,这是因为BorderLayout
只需声明另一个布局,它应该可以工作:
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();
}
}
答案 2 :(得分:0)
首先,建议不要将组件添加到框架,而是添加到容器。最简单的方法是将JPanel添加到框架的Container中,然后添加到此JPanel的任何后续组件。
例如
JFrame customFrame = new JFrame();
JPanel customPanel = new JPanel();
customPanel.setLayout(new BorderLayout());
customFrame.getContentPane().add(customPanel);
//add your buttons to customPanel
其次你制作了一个自定义类ButtonDemo,它扩展了Frame然后为什么你再次在其中创建一个框架?在你的情况下你可以直接说
setLayout(new BorderLayout()); // equivalent to this.setLayout(new BorderLayout());
add(new Button("polo"));
而不是创建一个单独的框架并向其添加组件/布局。
您正在将框架的布局设置为BorderLayout,但不使用其任何功能。
frame.setLayout(new BorderLayout());
如果您希望按钮位于您的欲望位置(例如NORTH),您必须指定
frame.add(new Button("Hello"),BorderLayout.NORTH);
再次,如果你想在NORTH位置有多个按钮,那么使用带有 BoxLayout 的面板(水平或垂直,无论你的要求是什么),然后将按钮添加到它。