добавить компоненты на панель в Java - PullRequest
0 голосов
/ 24 мая 2011

Я создаю апплет, который состоит из класса, который расширяет JApplet, с меню и классом, который расширяет JPanel. (Таким образом, в апплете есть меню и JPanel).

В этом классе я добавляю и удаляю некоторые текстовые поля в JPanel. Это все отлично работает. Вот где это становится сложно: это работает только в первый раз. Когда я добавляю несколько новых текстовых полей в JPanel, они добавляются и отображаются в JPanel, но меню в JFrame перестает работать.

Поскольку код слишком обширный, я буду публиковать его только части.

Вот код, куда я добавляю JPanel в JApplet:

public class Simulator extends JApplet implements ItemListener, ActionListener {
    Container pane = getContentPane();
    canvas = new DrawCanvas();
    pane.add(canvas, BorderLayout.LINE_END);
}

Вот код JPanel:

class DrawCanvas extends JPanel {
    public void paintComponent(Graphics g) {
        if(textfield != null)
            remove(textfield);
        textfield = new JTextField();
        this.add(textfield);
    }
}

Это работает в первый раз (когда ничего не удалено), но во второй раз перестает работать меню. Когда я опускаю this.add (текстовое поле); линия, менубар продолжает работать.

Ответы [ 2 ]

0 голосов
/ 24 мая 2011

Однажды у меня были похожие проблемы с всплывающими меню, которые были нарисованы за другими компонентами.Попробуйте вызвать static JPopupMenu.setDefaultLightWeightPopupEnabled(false); или setLightWeightPopupEnabled в вашем конкретном подменю.Это сделает (все) всплывающие меню (то есть подменю) для компонентов с большим весом, которые имеют собственный узел.

0 голосов
/ 24 мая 2011

Я полагаю, что у вас возникли проблемы с многопоточностью. Добавление и удаление JComponents во время рисования может испортить EDT (который в первую очередь вызывает метод рисования).

...