2015-04-10 3 views
0

Я попытался создать класс, который расширяет JComponents, но когда я добавляю его в ящик, я вижу только пустое окно. Вы можете мне помочь? Что я ожидаю получить, это окно с 3 горизонтальными полями, содержащими метку и кнопку рядом с ней.Java Swing - как я рисую этот класс, который расширяет JComponent

public class MyWindowComp{ 
    public MyWindowComp(){ 

    JFrame frame = new JFrame("myFrame"); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    JPanel wp = new JPanel(new BorderLayout()); 

    Box vBox = new Box(BoxLayout.Y_AXIS); 

    MyComponent one = new MyComponent(); 
    MyComponent two = new MyComponent(); 
    MyComponent three = new MyComponent(); 

    vBox.add(one); 
    vBox.add(two); 
    vBox.add(three); 

    wp.add(vBox); 


    frame.add(wp); 
    frame.setVisible(true); 
    }} 

public class MyComponent extends JComponent { 

private Box box; 
private JButton b; 
private JLabel l; 

public MyComponent(){ 
    this.box = new Box(BoxLayout.X_AXIS); 

    this.l = new JLabel ("label"); 
    this.l.setVisible(true); 
    this.b = new JButton("button"); 
    this.b.setVisible(true); 

    box.add(l); 
    box.add(b); 

}} 

Получено: enter image description here

Ожидаемое: enter image description here

+1

Ваш вопрос, похоже, не связан с реальной проблемой, которая, похоже, сводится к «Как получить компоненты для отображения?». См. [Что такое проблема XY?] (Http://meta.stackexchange.com/q/66377) –

+0

Образованное предположение: вы не переопределили какие-либо методы 'paint *()', поэтому ваш компонент рисует ... ничего. Если вы просто хотите сгруппировать некоторые другие компоненты, просто используйте «JPanel» –

+0

, я думаю, вы попали в гвоздь на голове. Я ищу способ рисовать myComponent. Я ошибочно предположил, что это метод setVisible ... – Koop4

ответ

0

Кажись, как домашнее задание, я постараюсь ответить как учитель

  1. вы забыли способ загрузить MyWindowComp() метод

  2. если оно и он показывает только строку меню, тогда вы забудете установить его с помощью frame.setSize (x, y);

+0

Код, приведенный выше, был создан, чтобы объяснить проблему, которая у меня есть в моем коде. Что я получаю, когда я запускаю свое приложение, это окно, в котором нет ничего, что я хотел бы видеть, это окно, содержащее объекты класса myComponent – Koop4

3

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

В конструкторе MyComponent classe вы создаете ящик, а затем добавляете два компонента в Box, но вы не добавляете Box в свой компонент.

Решение избавиться от Box и добавить кнопку и маркировать непосредственно к компоненту:

public MyComponent() 
{ 
    setLayout(new BoxLayout(this, BoxLayout.X_AXIS)); 

    l = new JLabel ("label"); 
    b = new JButton("button"); 

    add(l); 
    add(b); 
} 

Также:

  1. нет никакой необходимости использовать SetVisible (истина) на каждый компонент, поскольку компоненты по умолчанию видны (кроме контейнеров верхнего уровня, таких как JFrame).
  2. Обычно вы должны расширить JPanel, так как цель панели состоит в том, чтобы содержать другие компоненты.