我想在不同标签被选中时,给一些参数赋不同值,然后在其他方法中通过参数的值来进行判断~代码如下:
全局变量了int index = 0;
然后在JTabbedPane里
jTabbedPane.addChangeListener(new ChangeListener()
 {
    public void stateChanged(ChangeEvent e)
       {
           index = tabbedPane1.getSelectedIndex();
       }
  });
jTabbedPane.add("tab1",new JPanel());
jTabbedPane.add("tab2",new JPanel());
然后在界面其他panel处的文本框方法中
if(index == 0)
{
  jTextField.setEditable(false);
}
if(index == 1)
{
  jTextField.setEditable(true);
}
但是我发现index值只是在最初被选中tab1时赋值为0,而选中tab2时并没反应。为什么?要怎么做才能实现?

解决方案 »

  1.   

    恩,好像是因为当jvm第一次运行时,产生一个frame,然后当changeEvent发生,jvm会去运行这部分的代码,也就是对index赋值,但它不会去运行jTextfield处的代码,所以文本框处是不变的,是不是这样解释啊?
    我现在改了下,在stateChanged方法里,
    if(tabbedPane1.getSelectedIndex() == 1)
    {
       changeJTextField()
    }
    再在下面
    private void changeJTextField()
    {
       jTextField.setEditable(true);
    }
    但是如果这样的话,不是每次需要根据标签改变时进行的判断都得写个方法?
      

  2.   

    楼主是要这样?
    import javax.swing.*;
    import javax.swing.event.*;import java.awt.*;public class TabIndex extends JFrame {

    private JTextField textField1;
    private JTabbedPane tabs;

    public TabIndex() {
    Container contentPane = getContentPane();
    contentPane.setLayout(new BorderLayout());

    textField1 = new JTextField();
    contentPane.add(textField1, BorderLayout.NORTH);

    tabs = new JTabbedPane();
    tabs.add("Tab 1", new JPanel());
    tabs.add("Tab 2", new JPanel());
    tabs.addChangeListener(new ChangeListener() {
    public void stateChanged(ChangeEvent e) {
    int index = tabs.getSelectedIndex();
    textField1.setEditable(index == 0);
    }
    });

    contentPane.add(tabs, BorderLayout.CENTER);

    setSize(400, 300);
    setVisible(true);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } public static void main(String[] args) {
    new TabIndex();
    }}
      

  3.   

    已经解决了,和3楼的差不多,不过stateChanged()里
    if (tabs.getSelectedIndex() == 0)
    {
       canEditable();
    }
    if(tabs.getSelectedIndex() == 1)
    {
       cannotEditable();
    }
    然后
    private void canEditable()
    {
       jTextField.setEditable(true);
    }
    private void cannotEditable()
    {
       jTextField.setEditable(false);
    }