在IE

时间:2016-05-11 13:59:55

标签: java

我正在开展另一个工作项目。对于这个项目,我正在处理XML文件,特别是我的程序允许用户基于多个GUI选项和JTable数据创建XML文件。我想添加的一个功能是用户只需单击按钮即可打开或查看创建的XML文件。

在我创建的另一个程序中,用户能够生成一个称为.ACH的固定格式文本文件。对于该程序,用户可以使用以下代码在记事本中打开文件:

public void displayFileOptionEdited(){



            int dialogResult = JOptionPane.showConfirmDialog(null, "Output file saved as "+Rewriter.location+ "\nWould you like to view the file?","Display Output",JOptionPane.YES_NO_OPTION);

            if(dialogResult==JOptionPane.YES_OPTION){

                ProcessBuilder pb = new ProcessBuilder("Notepad.exe", Rewriter.location);
                try {
                    pb.start();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }



        }

    }

我当前程序的问题是,当在记事本中查看时,XML文件只是乱码。查看此文件的唯一方法是在IE中打开它。 (我知道)。我确实试过一个创建JDialog的解决方案来查看这样的文件:

package view;

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.Font;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.border.EmptyBorder;
import javax.swing.JTextPane;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class XMLview extends JDialog {

    private final JPanel contentPanel = new JPanel();
    /**
     * Create the dialog.
     */
    public XMLview(File file) {
        setBounds(100, 100, 555, 434);
        this.setTitle("XML Viewer");
        getContentPane().setLayout(new BorderLayout());
        contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5));
        getContentPane().add(contentPanel, BorderLayout.CENTER);
        contentPanel.setLayout(new BorderLayout(0, 0));
        {
            JTextPane textPane = new JTextPane();
            JScrollPane jsp = new JScrollPane(textPane);
            Font font = new Font(Font.SANS_SERIF, 3,15);
            textPane.setFont(font);
            contentPanel.add(jsp);
             try {
                   textPane.read(new FileReader( file), null);
             } catch (IOException ex) {
                   System.out.println("problem accessing file"+file.getAbsolutePath());
             }
        }
        {
            JPanel buttonPane = new JPanel();
            buttonPane.setLayout(new FlowLayout(FlowLayout.RIGHT));
            getContentPane().add(buttonPane, BorderLayout.SOUTH);
            {
                JButton okButton = new JButton("OK");
                okButton.addActionListener(new ActionListener() {
                    public void actionPerformed(ActionEvent e) {
                        dispose();
                    }
                });
                okButton.setActionCommand("OK");
                buttonPane.add(okButton);
                getRootPane().setDefaultButton(okButton);
            }
        }
    }

}

此解决方案的问题在于,当XML生成到JDialog中时,它不会保留正确的格式。而不是占用几百行左右,它被拖出3行。 XML有超过60个标签,因此可能存在问题 - 我对采用这种方法并不感兴趣,因为我认为这将是一个令人头痛的问题。

所以我的最终解决方案是在发生某些操作时在IE中打开文件。所以我们回到我之前用记事本打开文件的例子。我意识到你不能用IE做这个,因为它不像记事本这样的“系统”实用程序。你会(我假设)必须提供一个对多个用户来说很难的直接路径。

这就是事情 - 这个程序的用户都运行相同的系统,并为他们的PC提供相同的文件布局。唯一的区别是其用户目录的用户名。所以我想知道是否有可能告诉程序在IE中打开文件,以及我如何做它以便它可以应用于所有用户,即使使用不同的用户名?如果有人知道某种方式,我会非常感激听到它。

同样,由于XML文件内容的敏感性,我无法发布完整代码。我试过找另一个可以说明相同例子的XML,但我无法做到。

所以总结一下,如果有任何混淆 - 我只是希望用户能够点击按钮和程序在IE中自动打开文件。

3 个答案:

答案 0 :(得分:1)

我强烈建议使用除桌面之外的其他内容。取决于IE不是理想的解决方案。

我建议实施XMLEditorKit。

非常容易实施。

你可以在这里找到一切: http://java-sl.com/xml_editor_kit.html

答案 1 :(得分:0)

你尝试过这个:

JTextPane textPane = new JTextPane();
textPane.putClientProperty(JTextPane.HONOR_DISPLAY_PROPERTIES, Boolean.TRUE);

如果你想在JTextPane中绘制Html内容,那么你必须为JTextPane设置#setContentType(" text / html");

答案 2 :(得分:0)

使用Desktop系统集成。

Desktop.getDesktop().browse(new URI("file:/... .xml"));

open(new File("... .xml"))

IE已注册XML文件,因此这可能是最短的方式。