我正在开展另一个工作项目。对于这个项目,我正在处理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中自动打开文件。
答案 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文件,因此这可能是最短的方式。