Java JFrame:как рекурсивно выполнять синтаксический анализ через компоненты (т.е.при использовании JScrollPane)

StackOverflow https://stackoverflow.com/questions/368194

Вопрос

Я использую Табличное описание для моего графического интерфейса swing.Изначально только некоторые базовые метки, кнопки и текстовые поля, где это необходимо, к которым я мог бы позже получить доступ с помощью:

public Component getComponent(String componentName) {
    return getComponent(componentName, this.frame.getContentPane());
}

private Component getComponent(String componentName, Component component) {
    Component found = null;

    if (component.getName() != null && component.getName().equals(componentName)) {
        found = component;
    } else {
        for (Component child : ((Container) component).getComponents()) {
            found = getComponent(componentName, child);

            if (found != null)
                break;
        }
    }
    return found;
}

К сожалению, я столкнулся с проблемами после использования using JScrollPane для поддержки прокрутки в JTextArea и JTable, которые я сделал с помощью:

JTextArea ta = new JTextArea();
ta.setName("fooburg");
JScrollPane scr = new JScrollPane(ta);
frame.getContentPane().add(scr, "1, 1");  // EDIT: changed, tkx bruno

После предложений я смог получить доступ через getComponent("fooburg") желаемый компонент (приведенная выше версия является окончательной).Большое спасибо Дэну и Бруно!

Это было полезно?

Решение

@бруно прав - вам нужно добавить текстовую панель в панель содержимого фрейма.

Слегка ОТ:Если вы обычно хотите получить доступ к каждому компоненту в иерархии, вам нужно что-то рекурсивное - ваш текущий метод будет печатать только непосредственные дочерние имена:

void printNames(Component component) {
    System.out.println(component.getName());
    for (Component child : component.getComponents()) {
        printNames(child);
    }
}

void printFrameNamesComponents(JFrame frame) {
    printNames(frame.getContentPane());
}

(не проверял, но что-то вроде этого.)

Другие советы

Вместо этого вам нужно добавить дочерний элемент в панель содержимого JFrame:

frame.getContentPane().add(comp);

Если вы добавите свой новый компонент непосредственно в JFrame, ваш приведенный выше код никогда не попадет к нему, потому что вы перечисляете только компоненты в разделе frame.getContentPane().

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top