我做了一个窗口,有一个文本框和一个按纽,如果文本框中不输入任何东西就点击按纽,就会弹出一个对话框提示需要输入信息,关掉对话框后原来窗口被对话框覆盖的地方就没有了,为什么自己不重绘呢?怎样解决才能使得对话框关闭后自动重绘呢?

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【wangydong】截止到2008-07-24 10:25:20的历史汇总数据(不包括此帖):
    发帖的总数量:3                        发帖的总分数:50                       每贴平均分数:16                       
    回帖的总数量:52                       得分贴总数量:12                       回帖的得分率:23%                      
    结贴的总数量:3                        结贴的总分数:50                       
    无满意结贴数:0                        无满意结贴分:0                        
    未结的帖子数:0                        未结的总分数:0                        
    结贴的百分比:100.00%               结分的百分比:100.00%                  
    无满意结贴率:0.00  %               无满意结分率:0.00  %                  
    敬礼!
      

  2.   

    什么意思啊,我是初学GUI啊,说的明白点好吗?
      

  3.   

    package gw.drawer;import java.awt.Color;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JOptionPane;
    import javax.swing.JPanel;
    import javax.swing.JTextField;public class Test1 extends JFrame
    {
    private static final long serialVersionUID = -4763203420993364680L;
    JPanel p = (JPanel)this.getContentPane();
    JTextField f = new JTextField(10);
    JButton b = new JButton("确定");
    static Test1 t;

    public static void main(String [] args)
    {
    t = new Test1();
    }

    public Test1()
    {
    p.setLayout(null);
    p.setBackground(Color.cyan);
    f.setBounds(10, 10, 80, 20);
    b.setBounds(10, 40, 60, 20);
    b.addActionListener(new ActionListener()
    {
    public void actionPerformed(ActionEvent e)
    {
    if (f.getText().length() == 0)
    {
    JOptionPane.showMessageDialog(t, "请输入信息");
    }
    else
    {
    JOptionPane.showMessageDialog(t, f.getText());
    }
    }
    });
    p.add(f);
    p.add(b);
    this.setSize(240, 320);
    this.setLocation(392, 224);
    this.setResizable(false);
    this.setDefaultCloseOperation(EXIT_ON_CLOSE);
    this.setVisible(true);
    }
    }
    没瞧出你说的问题
      

  4.   

    你覆盖了被遮住窗口的 paint 方法了吗?
      

  5.   

    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import javax.swing.event.*;
    import java.sql.*;
    public class AlterEmployee extends MainFrame {
    private Frame frame;
    private JPanel jp;
    private JPanel jp1;
    private JPanel jp2;
    private JPanel jp3;
    private JLabel label1;
    private JLabel labelhead;
    private JLabel labelhead2;
    private JLabel label21;
    private JLabel label22;
    private JLabel label23;
    private JTextField employeeid;
    private JTextField employeeid2;
    private JTextField employeename;
    private JTextField sdeptid;
    private JButton btn1;
    private JButton btn2;
    private JButton btn3;
    private JButton btn4;
    private JButton btn5;

    public AlterEmployee(Frame frame1)
    {
    super(frame1,300,300,400,300);
    frame = frame1;

    jp1 = new JPanel();
    labelhead =new JLabel("—————————— 请在下面输入信息 ——————————");
    jp1.add(labelhead);

    GridBagLayout gbl1 = new GridBagLayout();
    GridBagConstraints gbc1 = new GridBagConstraints();

    jp2 = new JPanel();
    jp2.setLayout(gbl1);
    label1 = new JLabel("请输入要修改的员工的ID号:");
    gbc1.anchor = GridBagConstraints.WEST;
    gbc1.gridx=0;
    gbl1.setConstraints(label1,gbc1);
    jp2.add(label1);

    employeeid = new JTextField(10);
    gbc1.anchor = GridBagConstraints.EAST;
    gbc1.gridx = 1;
    gbl1.setConstraints(employeeid,gbc1);
    jp2.add(employeeid);

    jp3 = new JPanel();
        FlowLayout fLayout=new FlowLayout(FlowLayout.RIGHT);
        jp3.setLayout(fLayout);
        btn1 = new JButton("确定");
        btn2 = new JButton("关闭");
        jp3.add(btn1);
        jp3.add(btn2);

    jp = new JPanel();
    GridBagLayout gbl = new GridBagLayout();
    GridBagConstraints gbc = new GridBagConstraints();
    jp.setLayout(gbl);
    gbc.anchor = GridBagConstraints.CENTER;
    gbc.weighty = 40;
    gbl.setConstraints(jp1,gbc);
    jp.add(jp1);
    gbc.anchor = GridBagConstraints.CENTER;
    gbc.weighty = 30;
    gbc.gridy = 1;
    gbl.setConstraints(jp2,gbc);
    jp.add(jp2);
    gbc.anchor = GridBagConstraints.NORTH;
    gbc.weighty = 30;
    gbc.gridy = 2;
    gbl.setConstraints(jp3,gbc);
    jp.add(jp3);

    frame.add(jp);
    frame.setVisible(true);
    btn1.addActionListener(new btnActionListener());
        
        btn2.addActionListener(new ActionListener()
        {
         public void actionPerformed(ActionEvent e)
         {
         int retval = JOptionPane.showConfirmDialog(frame,"你真的要关闭窗口吗","结束程序",JOptionPane.YES_NO_OPTION);
    if(retval == JOptionPane.YES_OPTION)
         frame.dispose();
         }
        });
    frame.addWindowListener(new WindowAdapter()
    {
    public void windowClosing(WindowEvent e)
    {
    ((Window)e.getComponent()).dispose();
    }
    });
    }
    class btnActionListener implements ActionListener
    {
    public void actionPerformed(ActionEvent e)
    {
    String id = employeeid.getText();
    if(id.length()==0)
    {
    JOptionPane.showMessageDialog(frame,"请输入员工号!");
    frame.invalidate();
    return;
    }
    }
    }
    }
    只是部分代码,大家看看是什么问题?
      

  6.   

    你的AlterEmployee本身已经继承MainFrame,构造函数中的那个Frame是做什么用的?还有,awt组件和Swing组件混合使用?
      

  7.   

    awt组件和Swing组件不要混合试用
      

  8.   

    自己解决了,把Frame改成是JFrame就没问题了,不会出现上面的情况,但不知道是为什么,高手们谈谈?
      

  9.   

    awt和swing组件好像是采用了不同的机制的,所以混用以后会产生一定的不兼容问题。(隐约记得以前老师上课时这么说过的,是不是这么说的不记得了,但他绝对警告过我们不要混用两种组件,呵呵)
      

  10.   

    文本框啊?还有按钮都应该是放在一个jpanel里面的吧!
    如果
    我简单的写一下吧
    du extends Jframe implement ActionLister
    {
    Jpanel panel=new Jpanel();
    jtextFiend text=new JtextFied();
    jbutton button=new jbutton("提交");
    du()
    {
    panel.removeall();
    panel.add(text);
    panel.add(button)
    this.add(panel);
    this.pack();
    this.setvisable(true);
    this.setdefaluFrocl....(Jframe.ex....);
    }
    Actionlister(action e)//简写啊?按钮事件
    {
    if(e.sourse==button)
    {
    if(text.gettext().eques(""))//如果是空的话,就调用
    {
      start();
    }
    }
    }
    start()                      //实现重绘
    {
    panel.removeall();
    panel.add(new Jlable("aa");
    panel.add(new Jbutton(""));
    this.pack();
    this.repaint();}
    }
      

  11.   

    重点就是removeall();
    然后设置一下大小
    然后重绘
      

  12.   

    Swing 对基于对等体的组件使用的术语是重量级(heavyweight),对于模拟的组件使用的术语是轻量级(lightweight)。实际上,Swing 可以支持在一个 GUI 中混合使用重量级组件和轻量级组件,例如在一个 JContainer 中混合使用 AWT 和 Swing 控件,但是如果组件产生了重叠,就必须注意绘制这些控件的顺序。
      

  13.   

    JOptionPane.showMessageDialog(frame,"请输入员工号!");
    frame.invalidate();
    return; 一般不会出现搂主所说的问题,系统会自动检测界面那一部分要重绘,故不用frame.invalidate();