我在将此JPanel添加到窗格的Center块时遇到问题。本质上,这个主窗口是一个BorderLayout,它在Center中有centerPanel,而west和east块将是单独的BorderLayouts。我已经搜索了问题并查看了我的教授的示例代码,并在此处查看了stackoverflow,但我无法在代码中找到问题。
我在Eclipse中完成所有编码,因此我使用集成的AppletViewer。唯一出现的是一个空的灰色框,我希望看到包含JLabel和JTextAreas的centerPanel。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Lab7 extends JApplet implements ItemListener, ActionListener{
//variables
private JLabel currentOrder, total;
private JTextArea descTop, currentOrderTA, totalTA;
private JRadioButton sizeSmall, sizeMedium, sizeLarge, typeDeep, typePan, typeHand;
private JCheckBox pepperoni, bacon, extra_cheese, mushroom, pepper, sausage, tomato, olive;
private JButton orderButton, resetButton;
private ButtonGroup sizeBG, typeBG;
private BorderLayout borderLayoutMain, borderLayoutWest, borderLayoutEast;
private JPanel westPanel, centerPanel, eastPanel;
public void init(){
Container pane = getContentPane();
pane.setLayout(borderLayoutMain);
//borderLayoutMain centerPanel
centerPanel = new JPanel();
centerPanel.setLayout(null);
currentOrder.setSize(200, 25);
currentOrder.setLocation(100, 25);
currentOrderTA.setSize(600, 400);
currentOrderTA.setLocation(100, 50);
currentOrderTA.setEditable(false);
total.setSize(200, 25);
totalTA.setLocation(100, 450);
totalTA.setEditable(false);
orderButton.setSize(100, 50);
orderButton.setLocation(100, 500);
resetButton.setSize(100, 50);
resetButton.setLocation(400, 500);
centerPanel.add(currentOrder);
centerPanel.add(currentOrderTA);
centerPanel.add(total);
centerPanel.add(totalTA);
centerPanel.add(orderButton);
centerPanel.add(resetButton);
pane.add(centerPanel, BorderLayout.CENTER);
}
答案 0 :(得分:0)
由于您已取消布局管理器(centerPanel.setLayout(null);
),BorderLayout
不再知道面板的大小应该是多少(作为容器首选大小的值)由它的布局经理确定
考虑使用centerPanel
上的布局管理器,有关详细信息,请参阅Laying Out Components Within a Container。
避免使用null
布局,像素完美布局是现代ui设计中的一种幻觉。影响组件个体大小的因素太多,您无法控制。 Swing旨在与布局管理器一起工作,放弃这些将导致问题和问题的终结,您将花费越来越多的时间来纠正
有关详细信息,请参阅Why is it frowned upon to use a null layout in SWING?
<强>更新... 强>
致电时
pane.setLayout(borderLayoutMain);
borderLayoutMain
为null
,因此您现在在顶级容器中有null
布局。
尝试使用...
pane.setLayout(new BorderLayout());
,而不是...