Проблемы перекраски AWT - PullRequest
       45

Проблемы перекраски AWT

1 голос
/ 09 августа 2010

Я пытаюсь сделать небольшие дополнения к старому Java-коду, который не поддерживает Swing.Мне нужно добавить небольшой диалог, который содержит панель, которая имеет флажок и пару текстовых полей.Когда пользователь нажимает на флажок, я хочу отключить или включить флажки.Эта часть, кажется, работает хорошо, но текстовые поля не перерисовываются должным образом.Когда я нажимаю флажок, поля не становятся активными, но если я затем нажимаю на панель или текстовое поле, вы видите, что они включены (обратное также верно, когда я снимаю флажок, поля все еще выглядят включенными).пока вы не попытаетесь нажать на них, и они станут призраками и не станут выбранными).Я использую setEnabled (булево), чтобы установить статус полей.Я пытался вызвать перерисовку и проверку как на полях, так и на панели после изменения статуса, и это, похоже, не работает.Я также попытался сфокусировать запрос полей, но это не сработало.У кого-нибудь есть другие идеи?

 //The class that contains all of this is of type Window
 //Declaration of the components
  private Panel _inputPanel;
  private TextField min , max;
 //This method adds to two text fields
 public void addMinMaxtextFields(String min, String max) {
    TextField minField = new TextField(min);
    TextField maxField = new TextField(max);

    this.min = minField;
    this.max = maxField;
    this.min.setEnabled(false);
    this.max.setEnabled(false);
    _inputPanel.add(minField);

    _inputPanel.add(maxField);


}
//listener for the checkbox
public void itemStateChanged(ItemEvent e) {
    Component[] components = _inputPanel.getComponents();

    min.setEnabled(!min.isEnabled());
    min.setVisible(true);
    min.validate();
    min.repaint();

    _inputPanel.validate();
    _inputPanel.repaint();
    this.pack();

    this.setSize(this.getWidth(), this.getHeight());

    this.validate();

    this.repaint();
    /* do nothing */
}

1 Ответ

1 голос
/ 09 августа 2010

Вам нужно будет вызвать update (Graphics g) на Panel после вызова setEnabled (логический).

check: http://download -llnw.oracle.com / javase / 1.4.2 /docs / api / java / awt / Container.html # update (java.awt.Graphics)

Я пробовал следующий код (построен из предоставленного вами кода), он работает нормально.*

...