读书人

java swing 部件序列化输入后不能刷新

发布时间: 2012-03-24 14:00:46 作者: rapoo

java swing 部件序列化输入后不能刷新的问题,大家帮忙看看
我在界面中有一个JTree,构造一个树后,把它序列化输出,当序列化输入的时候却得不到原来的树了,我想是不是哪个地方没有被重画?大家帮我看一看。
一共是两个类。

Java code
package swing;import java.awt.BorderLayout;import java.awt.Dimension;import java.awt.GridLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.io.File;import java.io.FileOutputStream;import java.io.ObjectOutputStream;import javax.swing.ButtonGroup;import javax.swing.JButton;import javax.swing.JFileChooser;import javax.swing.JFrame;import javax.swing.JOptionPane;import javax.swing.JPanel;import javax.swing.JRadioButton;import javax.swing.JScrollPane;import javax.swing.JSplitPane;import javax.swing.UIManager;import javax.swing.tree.DefaultTreeModel;/** * 舆情分析主界面 *  * @author Administrator *  */public class MainFrame extends JPanel {    private String savePath = null; // 特征树要保存的路径    private String loadPath = null; // 要加载的特征树所在的路径    private String opinionPath = null; // 评论所在的文件路径    private String resultPath = null; // 分析结果的存放路径    private int newNodeIndex = 1; // 给特征树添加节点时用于唯一标示一个节点    private JPanel treeEditPane = new JPanel(); // 窗口中上半部分用于构造树的面板    private JPanel buttonPane = new JPanel(); // 窗口下半部分用于放置操作按钮的面板    private static JFrame frame = new JFrame("舆情分析系统"); // 用于显示的窗口    private FeatureTree treePane; // 放置树的面板    public MainFrame() {        super(new GridLayout(1, 0));        // 初始化“树操作区”和“按钮区”        initTreeView(null);        initButtonView();        JScrollPane treeView = new JScrollPane(treeEditPane);        JScrollPane buttonView = new JScrollPane(buttonPane);        // 中间分隔线        JSplitPane splitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT);        splitPane.setTopComponent(treeView);        splitPane.setBottomComponent(buttonView);        // 设置“树操作区”和“按钮区”大小及分隔线的位置        Dimension minimumSize = new Dimension(100, 50);        treeView.setMinimumSize(minimumSize);        buttonView.setMinimumSize(minimumSize);        splitPane.setDividerLocation(310);        splitPane.setPreferredSize(new Dimension(430, 370));        add(splitPane);    }    /**     * 初始化“树操作区”内容     *      */    private void initTreeView(DefaultTreeModel argTreeModel) {                        treePane = new FeatureTree(argTreeModel);        JPanel buttonPane = new JPanel();        JButton btnAdd = new JButton("添加");        JButton btnDelete = new JButton("删除");        JButton btnClear = new JButton("清空");        MyActionListener actionListener = new MyActionListener();        btnAdd.addActionListener(actionListener);        btnDelete.addActionListener(actionListener);        btnClear.addActionListener(actionListener);        buttonPane.add(btnAdd);        buttonPane.add(btnDelete);        buttonPane.add(btnClear);        treeEditPane.setLayout(new BorderLayout());        treeEditPane.add(treePane, BorderLayout.CENTER);        treeEditPane.add(buttonPane, BorderLayout.SOUTH);            }    /**     * 初始化“按钮区”的内容,并为按钮添加事件监听器     *      */    private void initButtonView() {        JButton btnExportTree = new JButton("保存特征树");        JButton btnImportTree = new JButton("导入特征树");        JButton btnOpinionFile = new JButton("选择评论文件");        JButton btnResultFile = new JButton("结果输出到");        JRadioButton wekaModel = new JRadioButton("WEKA", true);        JRadioButton svmModel = new JRadioButton("SVM", true);        JButton btnOk = new JButton("确定");        JButton btnConcle = new JButton("取消");        // 添加事件监听器        MyActionListener myListener = new MyActionListener();        btnExportTree.addActionListener(myListener);        btnImportTree.addActionListener(myListener);        btnOpinionFile.addActionListener(myListener);        btnResultFile.addActionListener(myListener);        btnOk.addActionListener(myListener);        btnConcle.addActionListener(myListener);        ButtonGroup bGroup = new ButtonGroup();        bGroup.add(wekaModel);        bGroup.add(svmModel);        buttonPane.setLayout(new GridLayout(2, 4));        buttonPane.add(btnExportTree);        buttonPane.add(btnImportTree);        buttonPane.add(btnOpinionFile);        buttonPane.add(btnResultFile);        buttonPane.add(wekaModel);        buttonPane.add(svmModel);        buttonPane.add(btnOk);        buttonPane.add(btnConcle);    }    /**     * 事件监听的内部类     *      * @author Administrator     *      */    private class MyActionListener implements ActionListener {        public void actionPerformed(ActionEvent e) {            String actionCommand = e.getActionCommand();            if (("保存特征树").equals(actionCommand)) {                JFileChooser fc = new JFileChooser();                fc.setDialogTitle("保存特征树到");                int returnVal = fc.showOpenDialog(frame);                if (returnVal == JFileChooser.APPROVE_OPTION) {                    File file = fc.getSelectedFile();                    savePath = file.getPath();                    boolean isSaveSuccess = treePane.saveTree(savePath);                    if (isSaveSuccess) {                        JOptionPane.showMessageDialog(frame, "保存特征树成功");                    } else {                        JOptionPane.showMessageDialog(frame, "保存特征树失败");                    }                }            } else if (("导入特征树").equals(actionCommand)) {                JFileChooser fc = new JFileChooser();                fc.setDialogTitle("导入特征树");                int returnVal = fc.showOpenDialog(frame);                if (returnVal == JFileChooser.APPROVE_OPTION) {                    File file = fc.getSelectedFile();                    loadPath = file.getPath();                    DefaultTreeModel treeModel = treePane.loadTree(loadPath);                                        if (treeModel!=null) {                        initTreeView(treeModel);                        JOptionPane.showMessageDialog(frame, "加载特征树成功");                    } else {                        JOptionPane.showMessageDialog(frame, "加载特征树失败");                    }                }            } else if (("选择评论文件").equals(actionCommand)) {                JFileChooser fc = new JFileChooser();                fc.setDialogTitle("选择评论文件");                int returnVal = fc.showOpenDialog(frame);                if (returnVal == JFileChooser.APPROVE_OPTION) {                    File file = fc.getSelectedFile();                    opinionPath = file.getPath();                }            } else if (("结果输出到").equals(actionCommand)) {                JFileChooser fc = new JFileChooser();                fc.setDialogTitle("结果输出到");                int returnVal = fc.showOpenDialog(frame);                if (returnVal == JFileChooser.APPROVE_OPTION) {                    File file = fc.getSelectedFile();                    resultPath = file.getPath();                }            } else if (("确定").equals(actionCommand)) {            } else if ("取消".equals(actionCommand)) {                frame.dispose();                System.exit(0);            } else if ("添加".equals(actionCommand)) {                // 为树添加一个节点                treePane.addObject((newNodeIndex++) + "name,0.###");            } else if ("删除".equals(actionCommand)) {                // 删除树的一个节点                treePane.removeCurrentNode();            } else if ("清空".equals(actionCommand)) {                // 清空树的节点                treePane.clear();            }        }    }    /**     * 创建并显示窗口     *      */    public static void createAndShowGUI() {        // 设置窗口样式        try {            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());        } catch (Exception e) {            System.out.println("设置窗口样式出错");            e.printStackTrace();        }        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);        MainFrame contentPane = new MainFrame();        contentPane.setOpaque(true);        frame.setContentPane(contentPane);        // 设置窗口大小,显示窗口        frame.pack();        frame.setLocationRelativeTo(null);        frame.setVisible(true);    }    public static void main(String args[]) {        javax.swing.SwingUtilities.invokeLater(new Runnable() {            public void run() {                createAndShowGUI();            }        });    }} 




[解决办法]
帮顶...
[解决办法]
好像序列化的时候需要实现Serilize接口的吧
您确定实现了?
对不起单词拼写错误了,呵呵
[解决办法]
探讨
实现了,swing控件已经实现了的

读书人网 >J2EE开发

热点推荐