corejava第10版
This commit is contained in:
1 parent
2021c3c227
commit
6165543dd3
1088 files changed
+94411
No files matched your search
@@ -0,0 +1,107 @@
|
||||
package write;
|
||||
|
||||
import java.io.*;
|
||||
import java.nio.file.*;
|
||||
|
||||
import javax.swing.*;
|
||||
import javax.xml.stream.*;
|
||||
import javax.xml.transform.*;
|
||||
import javax.xml.transform.dom.*;
|
||||
import javax.xml.transform.stream.*;
|
||||
|
||||
import org.w3c.dom.*;
|
||||
|
||||
/**
|
||||
* A frame with a component for showing a modern drawing.
|
||||
*/
|
||||
public class XMLWriteFrame extends JFrame
|
||||
{
|
||||
private RectangleComponent comp;
|
||||
private JFileChooser chooser;
|
||||
|
||||
public XMLWriteFrame()
|
||||
{
|
||||
chooser = new JFileChooser();
|
||||
|
||||
// add component to frame
|
||||
|
||||
comp = new RectangleComponent();
|
||||
add(comp);
|
||||
|
||||
// set up menu bar
|
||||
|
||||
JMenuBar menuBar = new JMenuBar();
|
||||
setJMenuBar(menuBar);
|
||||
|
||||
JMenu menu = new JMenu("File");
|
||||
menuBar.add(menu);
|
||||
|
||||
JMenuItem newItem = new JMenuItem("New");
|
||||
menu.add(newItem);
|
||||
newItem.addActionListener(event -> comp.newDrawing());
|
||||
|
||||
JMenuItem saveItem = new JMenuItem("Save with DOM/XSLT");
|
||||
menu.add(saveItem);
|
||||
saveItem.addActionListener(event -> saveDocument());
|
||||
|
||||
JMenuItem saveStAXItem = new JMenuItem("Save with StAX");
|
||||
menu.add(saveStAXItem);
|
||||
saveStAXItem.addActionListener(event -> saveStAX());
|
||||
|
||||
JMenuItem exitItem = new JMenuItem("Exit");
|
||||
menu.add(exitItem);
|
||||
exitItem.addActionListener(event -> System.exit(0));
|
||||
pack();
|
||||
}
|
||||
|
||||
/**
|
||||
* Saves the drawing in SVG format, using DOM/XSLT
|
||||
*/
|
||||
public void saveDocument()
|
||||
{
|
||||
try
|
||||
{
|
||||
if (chooser.showSaveDialog(this) != JFileChooser.APPROVE_OPTION) return;
|
||||
File file = chooser.getSelectedFile();
|
||||
Document doc = comp.buildDocument();
|
||||
Transformer t = TransformerFactory.newInstance().newTransformer();
|
||||
t.setOutputProperty(OutputKeys.DOCTYPE_SYSTEM,
|
||||
"http://www.w3.org/TR/2000/CR-SVG-20000802/DTD/svg-20000802.dtd");
|
||||
t.setOutputProperty(OutputKeys.DOCTYPE_PUBLIC, "-//W3C//DTD SVG 20000802//EN");
|
||||
t.setOutputProperty(OutputKeys.INDENT, "yes");
|
||||
t.setOutputProperty(OutputKeys.METHOD, "xml");
|
||||
t.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");
|
||||
t.transform(new DOMSource(doc), new StreamResult(Files.newOutputStream(file.toPath())));
|
||||
}
|
||||
catch (TransformerException | IOException ex)
|
||||
{
|
||||
ex.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Saves the drawing in SVG format, using StAX
|
||||
*/
|
||||
public void saveStAX()
|
||||
{
|
||||
if (chooser.showSaveDialog(this) != JFileChooser.APPROVE_OPTION) return;
|
||||
File file = chooser.getSelectedFile();
|
||||
XMLOutputFactory factory = XMLOutputFactory.newInstance();
|
||||
try
|
||||
{
|
||||
XMLStreamWriter writer = factory.createXMLStreamWriter(Files.newOutputStream(file.toPath()));
|
||||
try
|
||||
{
|
||||
comp.writeDocument(writer);
|
||||
}
|
||||
finally
|
||||
{
|
||||
writer.close(); // Not autocloseable
|
||||
}
|
||||
}
|
||||
catch (XMLStreamException | IOException ex)
|
||||
{
|
||||
ex.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user