2014-11-03 7 views
0

У меня возникли проблемы с добавлением этой JPanel в центральный блок панели. По сути, это главное окно - BorderLayout, у которого есть центрPanel в Центре, а западный и восточный блоки будут отдельными BorderLayouts. Я искал проблему и просмотрел пример кода от моего профессора и здесь, в stackoverflow, но я не могу найти проблему в своем коде.Добавление JPanel в BorderLayout JApplet

Я делаю все свое кодирование в Eclipse, поэтому я использую встроенный AppletViewer. Единственное, что появляется, это пустой серый ящик, где я ожидаю увидеть centerPanel, который включает JLabels и JTextAreas.

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

Поскольку вы покончили с менеджером компоновки (centerPanel.setLayout(null);) BorderLayout больше не имеет ни малейшего представления, что размер панели должен быть (в качестве значения для предпочтительного размера контейнера установлено путем его менеджер макетов)

Рассмотрите возможность использования диспетчера компоновки на centerPanel, см. Laying Out Components Within a Container для получения более подробной информации.

Избегайте использования макетов null, идеальные макеты пикселей являются иллюзией в современном дизайне ui. Слишком много факторов, которые влияют на индивидуальный размер компонентов, ни один из которых вы не можете контролировать. Свинг был разработан для работы с менеджерами компоновки в ядре, отбрасывая это не приведет к концу вопросов и проблем, с которыми вы будете тратить больше времени, пытаясь исправить

См Why is it frowned upon to use a null layout in SWING? для более подробной информации

Обновлены. ..

Когда вы звоните

pane.setLayout(borderLayoutMain); 

borderLayoutMain является null, так что вы теперь имеют null макет на контейнере верхнего уровня.

Попробуйте использовать ...

pane.setLayout(new BorderLayout()); 

вместо ...

+0

Я изменил линию разметки на: centerPanel.setLayout (новый GridLayout (5, 3)); и прокомментировал строки setSize и setLocation. Я все еще не вижу ничего в JApplet. Мне нужно добавить что-то еще? – prograded

+0

Проверить обновление ... – MadProgrammer

+0

добавить (панель); возвращает ошибку: java.lang.IllegalArgumentException: добавление родителя контейнера к себе – prograded