Я пытаюсь изменить компонент с JLabel
на JComboBox
, когда добавлена еще одна опция, но по какой-то причине панель не обновляется.Явная смена существующего компонента
SSCCE:
public class SwitchComponent {
public static void main(String[] args) {
JPanel panel = new JPanel();
JComponent component = new JLabel("This is a test");
panel.add(component);
JComboBox<String> comboBox = new JComboBox<String>();
comboBox.addItem("Testing..");
comboBox.addItem("1.. 2.. 3..");
component = comboBox;
// I have tried with only one of the below lines and without any also...
// Doesn't seem to have an effect.
// I've also tried invoking the below methods on the panel instead.
component.revalidate();
component.repaint();
JOptionPane.showConfirmDialog(null, panel, "Test",
JOptionPane.OK_OPTION,
JOptionPane.PLAIN_MESSAGE);
}
}
Почему это происходит? Не следует ли panel
ссылаться на component
так, чтобы любые изменения в component
отражались через panel
?
Должен ли я действительно полностью собирать панель при изменении компонента?
Несмотря на то, что это работает, это вызывает проблемы с упорядочением компонентов, если на панели имеется более одного компонента. То есть метка может быть второй в серии из трех, я бы хотел, чтобы поле со списком оставалось вторым, когда компонент был изменен в поле со списком. Поэтому почему я пытался изменить ссылку. – Lerp