那我在把问题说一遍,
一个jframe里套了一个jpanel,jpanel里有jtabbedpane做的四个jpanel,
在jframe里有个保存按钮,点击保存按钮,把四个jpanel里的jtextfield里的值写到本地一个xml文件里,写xml文件的方法已经写好了,不知道这样的保存该怎么实现?
我是想在frame里定义变量,然后jtextfield值变化的时候更新变量,点击保存的时候把这些变量写进xml,不知道怎么实现?

解决方案 »

  1.   

    我觉得应该在切换tabbedpane中panel时,保存这个值。
    如果jtextfield值变化的时候保存,更新的频率太高了。
      

  2.   

    值变化的时候更新变量,而点击保存的时候,再写进xml里,不是值变化了就保存。
      

  3.   

    不知道这样可以不
    jtextfield.addInputMethodListener(myListener);
    实现InputMethodListener的方法
    inputMethodTextChanged()
    方法中 string = jtextfield.getText();
      

  4.   

    按保存的时候才去textfield取值,写进变量,再写进文件
      

  5.   

    侦听文本框的值变化我知道,我就是不知道怎么让frame知道保存的值是什么?因为这个按钮只有一个是在frame里的,而要保存的是多页的jtabbedpanel里的值。
      

  6.   

    我就你的问题做了个小例子,不知道是不是你所要的。
    import javax.swing.*;
    import java.awt.BorderLayout;
    import java.awt.event.*;public class TestGetText extends JFrame{
        private JPanel contentPane = new JPanel();    private JTabbedPane mainTabPane = new JTabbedPane();
        private JPanel[] tabPanes = new JPanel[4];
        private JTextField[] textFields = new JTextField[4];    private JPanel btnPane = new JPanel();
        private JButton saveBtn = new JButton("Save");
        private JButton cancelBtn = new JButton("Cancel");    public TestGetText() {
            super("Demo");
            initTabPane();
            initBtnPane();        contentPane.setLayout(new BorderLayout());
            contentPane.add(mainTabPane,BorderLayout.CENTER);
            contentPane.add(btnPane, BorderLayout.SOUTH);
            this.setContentPane(contentPane);
            this.setBounds(200,200,300,300);
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            this.show();
        }    private void initTabPane() {
            for (int i = 0; i < 4; i++) {
                textFields[i] = new JTextField(10);
                tabPanes[i] = new JPanel();
                tabPanes[i].add(textFields[i]);
                mainTabPane.add("" + i, tabPanes[i]);
            }
        }    private void initBtnPane() {
            saveBtn.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent ae) {
                    showText();
                }
            });
            cancelBtn.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent ae) {
                    System.exit(0);
                }
            });        btnPane.add(saveBtn);
            btnPane.add(cancelBtn);
        }    public void showText() {
            StringBuffer msgBuff = new StringBuffer();
            for (int i = 0; i < 4; i++) {
                msgBuff.append(i);
                msgBuff.append(": ");
                if(textFields[i].getText() != null) {
                    msgBuff.append(textFields[i].getText());
                } else {
                    msgBuff.append("null");
                }
                msgBuff.append("\n");
            }
            JOptionPane.showMessageDialog(this, msgBuff);
        }    public static void main(String[] args) {
            new TestGetText();
        }
    }
      

  7.   

    我的程序结构是这样的,jframe<-jpanelxxx<---jtabbedpanel<---四个jpanel
    文件是jframe.java,jpanelxxx.java,还有四个jpanel.java,四个jpanel.java里有jtextfield,保存写在jframe.java里,何如实现呢?
      

  8.   

    你可以这样:
    四个jpanel.java里写一个public String getText()之类的方法来收集jtextfield里的文本,然后返回这个文本。
    当点jframe.java里的按钮时,调用此方法即可呀。
      

  9.   

    这个问题已经解决了,我现在写了个接口,然后通过getRootPane来调取最上面一层的容器,可以了!谢谢大家,在这里还是学到了很多东西,以后有问题会常来问的。
      

  10.   

    非常好,学习学习!
    csdn高手如云