首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AWT重绘问题

AWT重绘问题
EN

Stack Overflow用户
提问于 2010-08-10 01:34:35
回答 1查看 570关注 0票数 1

我正在尝试对一些不支持swing的旧java代码做一些小的补充。我需要添加一个小对话框,其中包含一个面板,其中有一个复选框和几个文本字段。当用户单击复选框时,我想禁用或启用这些复选框。这部分似乎工作得很好,但文本字段没有正确地重新绘制。当我单击复选框时,这些字段不会显示为已启用,但如果我随后单击面板或文本字段,您会看到它们已启用(相反情况也是如此,当我取消选中复选框时,这些字段仍将显示为已启用,直到您尝试单击它们,它们才会变为重影,而不会变为选中状态)。我使用setEnabled(布尔值)来设置字段的状态。在更改状态后,我尝试在字段和面板上调用repaint和validate,但这似乎不起作用。我也尝试过让字段请求焦点,但这不起作用。还有没有别的主意?

代码语言:javascript
复制
 //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 */
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-08-10 01:46:13

在调用setEnabled(boolean)之后,您需要在面板上调用update(Graphics g)。

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

我尝试了下面的代码(从你提供的代码构建),它工作得很好。

代码语言:javascript
复制
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);

    }

}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3442583

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档