Добавление компонента Java GUI на событие мыши - PullRequest
0 голосов
/ 27 апреля 2009

Эй, ребята, переполнение стека,

Я пытался заставить код работать так, чтобы я мог дважды щелкнуть по элементу в JList, и он создает новый JList в другом месте фрейма с нуля всех имен объектов принадлежащих ему элементов. к этой категории (это бесполезная информация, я думаю). Но проблема в том, что когда я дважды щелкаю по элементам в списке, он запускается через код для добавления компонента в JFrame, но он никогда не появляется, потому что я использую событие мыши для его сборки после запуска время или что-то?

Мой класс Gui:

public class MediaGUI extends JFrame

и код добавления происходит здесь

    _mediaList.addMouseListener(new MouseAdapter() {
        public void mouseClicked(MouseEvent event) {
            if (event.getClickCount() == 2) {
                CreateObjectPane(_mediaList.getSelectedValue().toString(););
            }
        }
    });

и вот строительный код, этот метод принадлежит MediaGUI, вот так. имеет в виду JFrame

 private void CreateObjectPane(String category)
 {
     /*=======================================================================
     * Create ther list on Objects that belong to each category
     * Also a scroll bar for the list
     *=======================================================================*/
    String objects[] = _mediaHandler.GetObjects(category);
    _mediaList = new JList(objects);
    _mediaList.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
    _mediaList.setLayoutOrientation(_mediaList.VERTICAL);
    _mediaList.setVisibleRowCount(-1);

    _mediaScrollPane = new JScrollPane(_mediaList);
    _mediaScrollPane.setPreferredSize(new Dimension(100,100));
    _mediaScrollPane.setAlignmentX(CENTER_ALIGNMENT);

    _mediaPanel = new JPanel();
    _mediaPanel.setLayout(new BoxLayout(_mediaPanel, BoxLayout.PAGE_AXIS));
    _mediaLabel = new JLabel("Media Objects");
    _mediaLabel.setLabelFor(_mediaList);

    _mediaPanel.add(_mediaLabel);
    _mediaPanel.add(Box.createRigidArea(new Dimension(0, 15)));
    _mediaPanel.add(_mediaScrollPane);
    _mediaPanel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));

    this.add(_mediaPanel, BorderLayout.CENTER);
}

Любая помощь, которую вы могли бы предложить, была бы полезна, если бы потребовалось какое-либо дополнительное объяснение, я с радостью ее потребую

Ответы [ 2 ]

3 голосов
/ 27 апреля 2009

Из документации :

Note: If a component has been added to a container that has been displayed, 
validate must be called on that container to display the new component. 
If multiple components are being added, you can improve efficiency by 
calling validate only once, after all the components have been added.

Некоторые другие советы:

  • Переименуйте CreateObjectPane в createObjectPane
  • Какой LayoutManager вы используете? Попробуйте поэкспериментировать с ним, поскольку в большинстве случаев новый компонент не появится там, где вы ожидаете.
0 голосов
/ 27 апреля 2009

Вам необходимо вызвать метод revalidate () для контейнера нового созданного компонента.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...