📄 erdsavedialog.java
字号:
if (result == JFileChooser.CANCEL_OPTION) { return; } File file = fileChooser.getSelectedFile(); if (file != null) { if (file.exists()) { int _result = GUIUtilities.displayConfirmCancelDialog( "Overwrite existing file?"); if (_result == JOptionPane.CANCEL_OPTION) { return; } else if (_result == JOptionPane.NO_OPTION) { showFileChooser(); } } filePath = fileChooser.getSelectedFile().getAbsolutePath(); } fileExtension = "." + fileExtension; if (!filePath.endsWith(fileExtension)) { filePath += fileExtension; } pathField.setText(filePath); } /** <p>Saves the image in the specified format. */ private String save(String path, int fileFormat) { File file = new File(path); if (fileFormat == EQ_FORMAT) { return saveApplicationFileFormat(file); } Dimension extents = parent.getMaxImageExtents(); int width = (int)extents.getWidth(); int height = (int)extents.getHeight(); int imageType = 0; int bgType = backgroundCombo.getSelectedIndex(); FileOutputStream fos = null; if ((fileFormat == GIF_FORMAT || fileFormat == PNG_FORMAT) && bgType == TRANSPARENT_BACKGROUND) { imageType = BufferedImage.TYPE_INT_ARGB; } else if (fileFormat == SVG_FORMAT) { imageType = BufferedImage.TYPE_INT_ARGB; } else { imageType = BufferedImage.TYPE_INT_RGB; } BufferedImage buffImage = new BufferedImage(width, height, imageType); Graphics2D g2d = buffImage.createGraphics(); if (fileFormat == JPEG_FORMAT || bgType == WHITE_BACKGROUND) { g2d.setColor(Color.WHITE); g2d.fillRect(0, 0, width, height); } paintImage(g2d); try { if (fileFormat == PNG_FORMAT) { ImageHandlerPNGEncoder ihandler = new ImageHandlerPNGEncoder( file.getParent(), null); ihandler.encodeImage(buffImage, file); } else if (fileFormat == SVG_FORMAT) { DOMImplementation domImpl = GenericDOMImplementation.getDOMImplementation(); Document document = domImpl.createDocument(null, "svg", null); SVGGraphics2D g = null; SVGGeneratorContext ctx = SVGGeneratorContext.createDefault(document); ctx.setComment("Generated by Execute Query with Batik SVG Generator"); g = new SVGGraphics2D(ctx, svgFontCheckbox.isSelected()); g.drawImage(buffImage, new AffineTransform(1f,0f,0f,1f,0,0), null); fos = new FileOutputStream(file); Writer out = new OutputStreamWriter(fos, "UTF-8"); g.stream(out, true); fos.flush(); out.close(); } else if (fileFormat == JPEG_FORMAT) { // --------------------------------------------- // for JPEG images using javax.imageio package // also works well - no quality setting however. // used as shown below: // --------------------------------------------- // ImageIO.write(buffImage, "jpeg", file); // buffImage.flush(); // --------------------------------------------- fos = new FileOutputStream(file); BufferedOutputStream bfos = new BufferedOutputStream(fos); JPEGImageEncoder jpegEncoder = JPEGCodec.createJPEGEncoder(bfos); JPEGEncodeParam jpegParam = jpegEncoder.getDefaultJPEGEncodeParam(buffImage); float quality = (qualitySlider.getValue()*10)/100.0f; jpegParam.setQuality(quality, false); jpegEncoder.setJPEGEncodeParam(jpegParam); jpegEncoder.encode(buffImage); bfos.flush(); bfos.close(); } else if (fileFormat == GIF_FORMAT) { fos = new FileOutputStream(file); GifEncoder gifEncoder = new GifEncoder(buffImage, fos); gifEncoder.encode(); } GUIUtilities.scheduleGC(); savedResult = SaveFunction.SAVE_COMPLETE; //dispose(); return "done"; } catch (Exception e) { savedResult = SaveFunction.SAVE_FAILED; GUIUtilities.displayExceptionErrorDialog("An error occured saving to file:\n" + e.getMessage(), e); return "failed"; } finally { if (fos != null) { try { fos.close(); } catch (IOException e) {} } } } private void paintImage(Graphics2D g) { // set the highest quality rendering g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); g.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_ON); g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC); g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON); g.setRenderingHint(RenderingHints.KEY_COLOR_RENDERING, RenderingHints.VALUE_COLOR_RENDER_QUALITY); g.setRenderingHint(RenderingHints.KEY_DITHERING, RenderingHints.VALUE_DITHER_ENABLE); g.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_NORMALIZE); g.setRenderingHint(RenderingHints.KEY_ALPHA_INTERPOLATION, RenderingHints.VALUE_ALPHA_INTERPOLATION_QUALITY); parent.resetAllTableJoins(); parent.getDependenciesPanel().drawDependencies(g); ErdTable[] tablesArray = parent.getAllComponentsArray(); for (int i = 0; i < tablesArray.length; i++) { tablesArray[i].setSelected(false); tablesArray[i].drawTable(g, tablesArray[i].getX(), tablesArray[i].getY()); } ErdTitlePanel title = parent.getTitlePanel(); if (title != null) { title.setSelected(false); title.drawTitlePanel(g, title.getX(), title.getY()); } } public int getSaved() { return savedResult; } /** <p>Removes the listeners within the JPEG options * components so changes do not propagate. */ private void removeListeners() { qualityTextField.removeKeyListener(this); qualityCombo.removeActionListener(this); qualitySlider.removeChangeListener(this); } /** <p>Adds the listeners within the JPEG options components. */ private void addListeners() { qualityTextField.addKeyListener(this); qualityCombo.addActionListener(this); qualitySlider.addChangeListener(this); } /** <p>Processes a change in the sliders value. * * @param the event object */ public void stateChanged(ChangeEvent e) { removeListeners(); int value = qualitySlider.getValue(); qualityTextField.setText(Integer.toString(value)); if (value == 10) qualityCombo.setSelectedIndex(3); else if (value >= 8) qualityCombo.setSelectedIndex(2); else if (value >= 3) qualityCombo.setSelectedIndex(1); else qualityCombo.setSelectedIndex(0); addListeners(); } public void keyReleased(KeyEvent e) { removeListeners(); int value = qualityTextField.getValue(); if (value > 10) { value = 10; } qualitySlider.setValue(value); if (value == 10) qualityCombo.setSelectedIndex(3); else if (value >= 8) qualityCombo.setSelectedIndex(2); else if (value >= 3) qualityCombo.setSelectedIndex(1); else qualityCombo.setSelectedIndex(0); addListeners(); } public void keyPressed(KeyEvent e) {} public void keyTyped(KeyEvent e) {} private void enableOptionsPanels(int index) { switch (index) { case 0: enableJpegPanel(false); enableGifPanel(false); enableSvgPanel(false); break; case 1: enableJpegPanel(true); enableGifPanel(false); enableSvgPanel(false); break; case 2: case 3: enableJpegPanel(false); enableGifPanel(true); enableSvgPanel(false); break; case 4: enableJpegPanel(false); enableGifPanel(false); enableSvgPanel(true); break; } } private void enableSvgPanel(boolean enable) { svgFontCheckbox.setEnabled(enable); } private void enableJpegPanel(boolean enable) { qualityLabel.setEnabled(enable); qualityTextField.setEnabled(enable); qualityCombo.setEnabled(enable); qualitySlider.setEnabled(enable); } private void enableGifPanel(boolean enable) { backgroundCombo.setEnabled(enable); backgroundLabel.setEnabled(enable); } /** <p>Performs the respective action upon selection * of a button within this dialog. * * @param the <code>ActionEvent</code> */ public void actionPerformed(ActionEvent e) { String command = e.getActionCommand(); if (command.equals("Cancel")) { dispose(); } else if (command.equals("Browse")) { showFileChooser(); return; } else if (command.equals("Save")) { final String path = pathField.getText(); if (MiscUtils.isNull(path)) { GUIUtilities.displayErrorMessage("You must enter a file name"); return; } final int fileFormat = imageTypeCombo.getSelectedIndex(); if ((fileFormat == EQ_FORMAT && !path.endsWith(".eqd")) || (fileFormat == JPEG_FORMAT && !path.endsWith(".jpeg")) || (fileFormat == SVG_FORMAT && !path.endsWith(".svg")) || (fileFormat == PNG_FORMAT && !path.endsWith(".png")) || (fileFormat == GIF_FORMAT && !path.endsWith(".gif"))) { GUIUtilities.displayErrorMessage("Invalid file extension for selected file type"); return; } doSave(path, fileFormat); return; } removeListeners(); Object object = e.getSource(); if (object == imageTypeCombo) { enableOptionsPanels(imageTypeCombo.getSelectedIndex()); } else if (object == qualityCombo) { int value = -1; int index = qualityCombo.getSelectedIndex(); if (index == 0) value = 3; else if (index == 1) value = 5; else if (index == 2) value = 8; else if (index == 3) value = 10; qualitySlider.setValue(value); qualityTextField.setText(Integer.toString(value)); } addListeners(); } private void doSave(final String path, final int fileFormat) { SwingWorker worker = new SwingWorker() { public Object construct() { try { setVisible(false); GUIUtilities.showWaitCursor(); return save(path, fileFormat); } finally { GUIUtilities.showNormalCursor(); } } public void finished() { GUIUtilities.showNormalCursor(); if (savedResult == SaveFunction.SAVE_COMPLETE) { dispose(); } else { setVisible(true); } } }; worker.start(); } private String saveApplicationFileFormat(File file) { savedResult = parent.saveApplicationFileFormat(file); SystemUtilities.addRecentOpenFile(file.getAbsolutePath()); GUIUtilities.scheduleGC(); if (savedResult == SaveFunction.SAVE_COMPLETE) { GUIUtilities.setTabTitleForComponent(parent, ErdViewerPanel.TITLE + " - " + file.getName()); } return "done"; } }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -