向Frame中加panle时总有变量名吧,可以通过变量名来访问,我做的有5个panel,相互显示没问题!

解决方案 »

  1.   

    hyhu(先飞笨鸟),你可能没有看清我的问题吧?
      

  2.   

    没有输入不切换,信息提示,下面的不会弹出两次啊。
    import javax.swing.*;
    import javax.swing.event.*;public class TestTabbedPane extends JDialog
    implements ChangeListener{

    JPanel p1,p2;
    JTabbedPane tp;
    JTextField tf;

    public TestTabbedPane(){
    tp=new JTabbedPane();
    p1=new JPanel();
    p2=new JPanel();
    tp.addTab("First",p1);
    tp.addTab("Second",p2);
    tf=new JTextField(10);
    p1.add(tf);
    this.setSize(320,240);
    this.getContentPane().add(tp);
    tp.addChangeListener(this);
    }

    public static void main(String[] args){
    new TestTabbedPane().setVisible(true);
    }

    public void stateChanged(ChangeEvent e) {
    if(tp.getSelectedIndex()==1 && tf.getText().equals("")){
    int i=JOptionPane.showConfirmDialog(null,"Blank","",JOptionPane.ERROR_MESSAGE);
    //if(i==JOptionPane.CANCEL_OPTION){
    tp.setSelectedIndex(0);
    //}
    }
    }}
      

  3.   

    kypfos(大学里没有回忆),你在那两个panel上再分别加一个JTabbedPane,是一下。
      

  4.   

    kypfos(大学里没有回忆) ,你的程序中在显示message前有判断:
    if(tp.getSelectedIndex()==1 && tf.getText().equals(""))
    你却掉判断后,试试。
      

  5.   

    if(tp.getSelectedIndex()==1 && tf.getText().equals(""))为什么要去掉判断呢?panel里又加上JTabbedPane,这样不太好吧。
      

  6.   

    kypfos(大学里没有回忆) ,我的JTabbedPane是有三层的,所以panel里又加上JTabbedPane。
    至于去掉判断,你在tp.getSelectedIndex()时,会得到0和1两种情况,你不去掉判断,等于1的情况被过滤掉了,当然只出一次message。实际上,我的程序中,stateChanged会被执行4次,我就是想不出原因,才到这里提问的,我怕别人误解,所以才说stateChanged被执行了两次。
      

  7.   

    kypfos(大学里没有回忆) ,怎么加条件,怎么判断?
      

  8.   


    try {throw new Exception();}catch(Exception e){e.printStackTrace();}
    打印看看分别是哪里调用的。
    是不是你自己add listener加了两次?
      

  9.   

    Acylas(Acylas) ,不会是加了两次的这种低级错误。
      

  10.   

    if(tp.getSelectedIndex()==1 && tf.getText().equals(""))
    像这样加条件判断或者不妨适时的加监听、移除监听addChangeListener(this
    removeChangeListener(this)