比如一个JFrame主窗体,
里面有3个JTextField,
还有一个按钮我现在想:程序运行后,出现以上描述的窗体,我想通过那个按钮改变主窗体的样式,
比如我按一下 里面就只显示2个JTextField,第3个隐藏起来。
不知道这样能不能实现?

解决方案 »

  1.   

    在按钮事件中处理:
    /**从此容器中移除指定组件。此方法还通知布局管理器,通过 removeLayoutComponent 方法从此容器的布局中移除该组件。*/
    pane.remove(Component comp); // 移除几个你看情况而定
    pane.invalidate();
    pane.validate();//需要的时候重新添加就可以了
    pane.add(Component comp);
    pane.invalidate();
    pane.validate();
      

  2.   


    触发事件 
    jt2.setVisible(false);
    jp.revalidate();
    jp.repaint();
      

  3.   

    import javax.swing.*;
    import java.awt.event.*;
    public class Xuexi extends JPanel{
    private JTextField jtf1;
    private JTextField jtf2;
    private JTextField jtf3;
    private JButton jb;
    Xuexi(){
    this.jtf1=new JTextField(10);
    this.jtf2=new JTextField(10);
    this.jtf3=new JTextField(10);
    this.jb=new JButton("隐藏");
    this.add(this.jtf1);
    this.add(this.jtf2);
    this.add(this.jtf3);
    this.add(this.jb);
    setXuexiListener();
    }
    public void setXuexiListener(){
    this.jb.addActionListener(new XuexiEvent(this));
    }
    public void getXuexiLEvent(){
    this.jtf3.setSize(0, 0);//把其中一个的窗口设成0大小就可以了
    }
    }
    class XuexiEvent implements ActionListener{
    private Xuexi xx;
    XuexiEvent(Xuexi xx){
    this.xx=xx;
    }
    public void actionPerformed(ActionEvent arg0) {
    xx.getXuexiLEvent();
    xx.repaint();
    }

    }
    class XuexiDemo{
    public static void main(String args[]){
    JFrame frame=new JFrame("Exam");
    frame.setSize(300,400);
    frame.add(new Xuexi());
    frame.setResizable(false);
    frame.setVisible(true);
    }
    }
      

  4.   

    谢谢楼上的各位大侠的帮助~~这个问题弄懂了还有个问题:就是运行一个java窗体,然后在这个窗体上点击一个按钮触发一个事件,如果这个事件的操作时间比较长,同时在这个事件操作的时候打开了另外一个界面把这个java的窗体档住了,再点这个java窗体的时候就啥也看不到了,只能等那个操作运行完毕才能看到。这个应该是线程的问题。绘制窗体是一个线程,运行事件操作是一个线程,而我没用多线程,所以运行事件的时候占用了该线程,导致了绘制窗体的线程一直在等待所以看不到!请问这样分析正确吗?如果正确怎么解决这个问题啊?执行操作的时候也要看见窗体。最好是不用写多线程。谢谢了
      

  5.   

    在按钮事件中处理:
    /**从此容器中移除指定组件。此方法还通知布局管理器,通过 removeLayoutComponent 方法从此容器的布局中移除该组件。*/
    pane.remove(Component comp); // 移除几个你看情况而定
    pane.invalidate();
    pane.validate();