В данный момент я застрял со следующей проблемой:
Мне нужно динамически обновлять расположение компонентов во время выполнения. Я делаю редактор форм для внешнего приложения. Я использую классы-обертки для стандартных компонентов 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);
}
Есть предложения?