Как определить компонент качания? - PullRequest
3 голосов
/ 08 декабря 2008

У меня проблема.

Я работаю над кодом другого парня, и есть JFrame с большим количеством JSeparators (он использовал их в качестве границ для «панелей»), теперь я заменяю их для класса JBorderedPanel, который следует тому же стилю границы всего применение.

Проблема в том, что некоторые из его разделителей не позволяют точно определить, где они находятся в коде, существует множество jSeparator #, замените его на любое число от 0 до 999.

Есть ли способ определить, какая переменная соответствует какой границе, кроме тестирования всех jSeparators один за другим?

До "Не заменяй их!" Я обязан заменить их. Я бы не стал этого делать, если бы мог.

Заранее спасибо.

Ответы [ 7 ]

8 голосов
/ 08 декабря 2008

Взгляните на Swing Explorer . Это довольно удобный инструмент для отладки свинга. Есть плагин для Eclipse, который будет инструктировать ваш код на лету и запускать.

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

2 голосов
/ 08 декабря 2008

Идите по дочерним элементам JFrame и добавьте слушателя мыши к каждому JSeparator внутри него:

public void installListeners (java.awt.Container parent) {
    for (Component child: parent.getComponents()) {
        if (child instanceof JSeparator) {
            child.addMouseListener (...
                hover(event);
            }
        }
        if (child instanceof java.awt.Container) {
            installListeners ((java.awt.Container)child);
        }
    }
}

Теперь реализуйте hover(), чтобы сравнить источник события со всеми полями в текущем классе и вывести то, что соответствует:

public void hover (MouseEvent event) {
    for (Field f: getClass().getFields()) {
        if (f.get(this) == event.getSource()) {
            System.out.println(f.getname());
            break;
        }
    }
}

Вам придется обработать несколько миллиардов исключений, но это в основном все.

2 голосов
/ 08 декабря 2008

Вы можете добавить цвет к каждому из этих разделителей в коде (зеленый, красный, желтый и т. Д.) И увидеть, где эти цветные JSeparator в конечном итоге отображаются в вашем приложении ...

1 голос
/ 08 декабря 2008

Вы можете установить MouseListener на каждый JSeparator. Когда мышь войдет в ее область, поверните ее фон в красный цвет и напечатайте строку, идентифицирующую объект, предпочтительно, напечатав ее имя переменной. Это, вероятно, требует от вас изменения вызовов конструктора, но ваша IDE должна поддерживать вас в этом.

0 голосов
/ 06 января 2009

Я бы посоветовал вам не использовать границы много. Границы, вероятно, самый неправильно используемый компонент в истории GUI. Первоначально предполагалось сгруппировать очень маленький набор связанных компонентов, обычно флажки или переключатели. Затем кто-то пригласил титулованную границу, и она превратилась в способ ленивого программирования для именования разделов, что в идеале должно быть сделано с использованием метки и пробела.

Граница просто добавит визуальный шум вместо намеченного разделения. Меньше значит больше.

0 голосов
/ 08 декабря 2008

Оп здесь, Мне понравились обе ваши идеи, но все jSeparators инициализируются так:

public JSeparator getJSeparatorArvore01() {
    if (jSeparatorArvore01 == null) {
        jSeparatorArvore01 = new JSeparator();
        jSeparatorArvore01.setLocation(new Point(14, 38));
        jSeparatorArvore01.setSize(new Dimension(72, 10));
    }
    return jSeparatorArvore01;
}

Как добавить слушателей мыши (или другие цвета) на более чем 50 jSeparators, не тратя 24 часа? (

0 голосов
/ 08 декабря 2008

Полагаю, предыдущий парень использовал какой-то графический редактор.

Моей первой попыткой будет редактор GUI в Netbeans или Eclipse. Они могут анализировать и отображать его правильно, если код действительно не уродлив.

Если он может быть открыт, вы можете отследить, где они находятся, выбрав их в пользовательском интерфейсе.

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