EXTENDING что сказал Том ...
Чтобы компонент, чтобы стать невидимым еще держать свое место, вы можете поместить его в CardLayout вместе с пустой меткой и только своп, который виден.
Вы можете создать класс для этого, как показано ниже. В основном показан пример, где, если вы нажмете кнопку, она будет удалена, сохранив ее положение. Я вставляю showComponent/hideComponent и setVisible (t/f) - зависит от стиля, который вам нравится.
Это может не точно ответить на то, что вы ищете, но может быть полезным для части вашего приложения.
public class Placeholder extends JPanel {
private static final long serialVersionUID = 1L;
private CardLayout cardLayout_;
public Placeholder(JComponent component) {
cardLayout_ = new CardLayout();
setLayout(cardLayout_);
add(component, "visible"); // the component
add(new JLabel(), "hidden"); // empty label
}
public void showComponent() {
cardLayout_.show(this, "visible");
}
public void hideComponent() {
cardLayout_.show(this, "hidden");
}
public void setComponentVisible(boolean visible) {
if (visible)
showComponent();
else
hideComponent();
}
public static void main(String[] args) {
JFrame f = new JFrame();
f.setLayout(new GridLayout(2,0));
for (int n = 1; n < 10; n++) {
JButton b = new JButton(n + "");
final Placeholder placeholder = new Placeholder(b);
f.add(placeholder);
b.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
placeholder.hideComponent();
}
});
}
f.pack();
f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
f.setVisible(true);
}
}
GridLayout? GridBagLayout? Я не уверен, что я точно понимаю вопрос; как кнопки перемещаются и меняют размер? –