2010-08-09 2 views
1

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

//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 */ 
} 
+0

Можете ли вы добавить фрагменты кода? –

+0

Извините, что у меня была чрезвычайная ситуация, и вас не было, я добавил фрагменты кода. – Mike2012

ответ

1

Вызывается для вызова обновления (графика g) на панели после вызова setEnabled (boolean).

проверка: http://download-llnw.oracle.com/javase/1.4.2/docs/api/java/awt/Container.html#update(java.awt.Graphics)

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

import java.awt.Checkbox; 
import java.awt.Component; 
import java.awt.Dialog; 
import java.awt.Frame; 
import java.awt.Panel; 
import java.awt.TextField; 
import java.awt.event.ItemEvent; 
import java.awt.event.ItemListener; 

public class CheckUI extends Dialog implements ItemListener { 

    // The class that contains all of this is of type Window 
    // Declaration of the components 
    private Panel _inputPanel; 
    private TextField min, max; 
    private Checkbox cb; 

    public CheckUI(Frame owner, boolean modal) { 
     super(owner, modal); 
     _inputPanel = new Panel(); 

     this.add(_inputPanel); 
     addMinMaxtextFields("min", "max"); 
    } 


    // This method adds to two text fields 
    public void addMinMaxtextFields(String min, String max) { 
     cb = new Checkbox(); 
     cb.addItemListener(this); 
     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); 
     _inputPanel.add(cb); 

    } 

    // 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 */ 
    } 

    /** 
    * @param args 
    */ 
    public static void main(String[] args) { 
     Frame parent = new Frame(); 
     parent.setVisible(true); 
     parent.setExtendedState(Frame.MAXIMIZED_BOTH); 
     parent.pack(); 

     CheckUI ui = new CheckUI(parent, true); 
     ui.pack(); 
     ui.setVisible(true); 

    } 

} 
+0

Хмм, похоже, это не трюк. Спасибо за ваш совет. – Mike2012

+0

@ Mike2012 Можете ли вы поделиться своим кодом? – YoK

+0

@ Mike2012 Я не думаю, что это полный код. Мне также нужно понять код, связанный с кодом, который полностью отсутствует. – YoK