Обновление позиции компонента во время выполнения - PullRequest
0 голосов
/ 26 октября 2011

В данный момент я застрял со следующей проблемой:

Мне нужно динамически обновлять расположение компонентов во время выполнения. Я делаю редактор форм для внешнего приложения. Я использую классы-обертки для стандартных компонентов Swing, в настоящее время JPanel и JLabel. Панели используют TableLayout. Я храню позицию каждого компонента в поле для каждого компонента. Когда что-то меняется, мне нужно рекурсивно обновить все позиции. Вот мой метод обновления позиций:

 public void updatePositioning() {
    Component[] comps = getComponents();
    removeAll();
    for (Component comp:comps) {
        System.out.println("Moving component "+comp + " to x="+pos.get(comp).getX() 
                +" to y="+pos.get(comp).getY());   
        c = new TableLayoutConstraints(String.valueOf(pos.get(comp).getX())+","
                +String.valueOf(pos.get(comp).getY()));

        add(comp, c);
        if (comp instanceof EditPanel) ((EditPanel)comp).updatePositioning();
    }
    repaint();
    revalidate(); 
}

Я знаю, это грубо, но это не работает. Кажется, все компоненты принадлежат ячейке 0,0 сетки X и Y верны, как я видел в отладчике. Вот как я могу добавить компоненты на свою панель:

public void addComponent(TableLayouted comp, int x, int y) {
    c = new TableLayoutConstraints(String.valueOf(x)+","+String.valueOf(y));
    add((JComponent) comp, c);
    //saving position of the component
    pos.put((Component) comp, comp.getTablePositon());
    System.out.println("Component "+comp+"added to x="+x+"y="+y);
}

Есть предложения?

Ответы [ 2 ]

2 голосов
/ 26 октября 2011

Есть предложения?

JComponent.getTopLevelAncestor () . validate ()

0 голосов
/ 29 октября 2011

Я наконец решил это с помощью следующего кода:

Component[] comps = getComponents();
removeAll();
layout = new TableLayout();
layout.setColumn(columns);
layout.setRow(rows);
setLayout(layout);

Это означает, что полное воссоздание всех макетов работает. Спасибо всем за помощь!

...