2015-08-07 3 views
0

Я знаю, что использование null Layout не является хорошим способом сделать приложение GUI, но я думаю, что это случай, когда я должен его использовать.Использование нулевого макета или нет в конкретном случае

У меня есть JPanel, которым управляет LayoutManager, и в этом JPanel есть несколько панов. В частности, в конкретном JPanel я должен рисовать линии и добавлять в конце этих строк некоторые JComponent, которые я создал.

В двух словах, что я делаю что-то вроде этого

JPanel p=new JPanel(); 
p.setLayout(null); 
..... 
@Override 
public void paintComponent(Graphics g) { 
    super.paintComponent(g); 
    ...... 
    g.drawLine(0,0,50,50); 
    JComponent s=new myJComponent(); 
    s.setBounds(50,50,10,10); 
    this.add(s); 
    ....... 
} 

Мой вопрос, может быть, немного философский, это: используется нулевой макет правильно в данном конкретном контексте? Я не нашел никакой замены для этого, потому что я добавляю свой компонент в конец строки, и эта задача должна быть выполнена в методе paintComponent.

Благодарим вас за советы.

+2

Плохая вещь о nulllayout, заключается в том, что вы устанавливаете точное количество пикселей. Это будет отлично смотреться на вашем экране, без сомнения, но что, если у пользователя есть либо более старый экран с гораздо меньшим разрешением? Экран станет слишком большим для экрана. А как насчет парня, который купил последнюю из последних? В его случае экран будет слишком мал для чтения. – Stultuske

+0

* ".. потому что я добавляю свой компонент в конец строки, и эта задача должна выполняться методом paintComponent." * Добавление компонентов в метод 'paint .. (Graphics)' вызовет 'repaint()', который вызовет вызов 'paint .. (Graphics)', который вызовет .. –

+0

Лучшим подходом в этом случае может быть ** пользовательский макет **. BTW - какие компоненты и как пользователю нужно взаимодействовать с ними? –

ответ

0

Если у вас нет компонентов внутри вашей панели, то наличие нулевого макета имеет смысл, у вас нет ничего в макете, поэтому нет менеджера макетов.

Если вы добавляете компоненты, тогда вы должны использовать диспетчер компоновки, чтобы выложить их, даже если это означает, что вы пишете свои собственные.

Что вы, безусловно, никогда не будете делать, это добавить новый компонент в paintComponent.

Я думаю, вы в замешательстве, или вы хотите переопределить paintComponent и нарисовать линии, или вы хотите добавить элементы управления, которые рисуют линии, а не paintComponent переопределены вообще.