2013-04-29 3 views
-1

Я новичок в Java UI и у меня есть этот основной вопрос:пользовательский компонент пользовательского интерфейса в Java Swing

Я хочу, чтобы создать пользовательский класс, который имеет 3 компонента свинг в нем, а затем я хочу, чтобы добавить эти компоненты пользовательский интерфейс.

class ListItem extends JComponent{ 
    /** 
    * 
    */ 
    private static final long serialVersionUID = 1L; 
    JCheckBox checkbox; 
    JLabel label; 
    JButton removeBtn; 

    public ListItem(String label) { 
     this.label = new JLabel(); 
     this.label.setText(label); 

     this.checkbox = new JCheckBox(); 

     this.removeBtn = new JButton(); 
     removeBtn.setText("Remove"); 
    } 
} 

и добавить его в пользовательский интерфейс, что я делаю это:

panelContent = new JPanel(new CardLayout()); 
this.add(panelContent, BorderLayout.CENTER); //some class which is added to UI 

ListItem mItem = new ListItem("todo item 1"); 
panelContent.add(mItem); 

, но это не working.It это ничего UI.while следующий код не добавляя работает отлично:

panelContent = new JPanel(new CardLayout()); 
this.add(panelContent, BorderLayout.CENTER); //some class which is added to UI 

JLabel lab = new JLabel(); 
lab.setText("label"); 
panelContent.add(lab); 
+1

вы не добавляя свои компоненты (флажок, этикетка, кнопка) для пользовательского компонента. (назовите 'this.add (label);' после их создания. – Breavyn

+0

@ColinGillespie Это должно быть ответом! – MadProgrammer

+1

* «Я новичок в java-интерфейсе, и у меня есть этот основной вопрос:« * Каков ваш вопрос? подумайте о 2 или 3, которые могут применяться, но вы выбираете один из них и добавляете его как [редактирование вопроса] (http://stackoverflow.com/posts/16273322/edit). –

ответ

5

Проблема в том, что вы никогда не добавляете свой компонент ListItem к самому компоненту. Более того, JComponent не имеет значения по умолчанию LayoutManager, поэтому вам нужно его установить.

Может быть что-то вроде этого:

class ListItem extends JComponent{ 
    /** 
    * 
    */ 
    private static final long serialVersionUID = 1L; 
    JCheckBox checkbox; 
    JLabel label; 
    JButton removeBtn; 

    public ListItem(String label) { 
     setLayout(new BorderLayout()); 
     this.label = new JLabel(); 
     this.label.setText(label); 

     this.checkbox = new JCheckBox(); 

     this.removeBtn = new JButton(); 
     removeBtn.setText("Remove"); 
     add(checkbox, BorderLayout.WEST); 
     add(this.label); 
     add(removeBtn, BorderLayout.EAST); 
    } 
} 
+0

@AndrewThompson Но была ошибка в моем код: 'add (label);' был некорректным и должен быть 'add (this.label);'. Исправлено. Спасибо за просмотр. :-) –

+0

Теперь все выглядит хорошо. :) –

Смежные вопросы