⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 imagemenu.java

📁 一个用Java 造成的小画家
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
                checkImageMenuItem();
            }
            public void internalFrameActivated(InternalFrameEvent e) {
                checkImageMenuItem();
            }
            public void internalFrameDeactivated(InternalFrameEvent e) {
            }
        };
    }
    
    private void checkImageMenuItem() {
        if(getDesktopPane().getAllFrames().length == 0 || getDesktopPane().getSelectedFrame() == null) {
            saveMenuItem.setEnabled(false);
            saveAsMenuItem.setEnabled(false);
            saveAllMenuItem.setEnabled(false);
        }
        else {
            saveMenuItem.setEnabled(true);
            saveAsMenuItem.setEnabled(true);
            saveAllMenuItem.setEnabled(true);
        }
    }
    
    public JMenu getMenu() {
        return imageMenu;
    }
    
    private void captureScreen() {
        parent.setVisible(false);
        int option = JOptionPane.showOptionDialog(null, 
                delaySlider, "delay ? (seconds)", JOptionPane.OK_CANCEL_OPTION,
                JOptionPane.QUESTION_MESSAGE, smallLogo, null, null);
        
        if(option == JOptionPane.CANCEL_OPTION) {
            parent.setVisible(true);
            return;
        }
        
        try {
            Thread.sleep(delaySlider.getValue() * 1000);
        }
        catch(InterruptedException e) {
            infoMessageBox(e.getMessage());
        }
        
        Image image = captureHelper.capture();
        
        parent.setVisible(true);
        
        newInternalFrame("*untitled", image);
    }
    
    private void newImageFile() {
        int option = JOptionPane.showOptionDialog(null, newImagePanel, "New image", 
                JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE, smallLogo, null, null);
        
        if(option == JOptionPane.OK_OPTION) {
            int width = ((Integer) widthSpinner.getValue()).intValue();
            int height = ((Integer) heightSpinner.getValue()).intValue();
            BufferedImage bufferedImage = new BufferedImage(width , height, BufferedImage.TYPE_INT_RGB);
            Graphics g = bufferedImage.getGraphics();
            g.setColor(backgroundColorBox.getColor());
            g.fillRect(0, 0, width, height);
            newInternalFrame("untitled", bufferedImage);
        }
    }
    
    private void newInternalFrame(String title, Image image) {
        JInternalFrame internalFrame = createImageInternalFrame(title, image);

        getDesktopPane().add(internalFrame);
        
        internalFrame.setVisible(true);
        
        try {
            internalFrame.setSelected(true);
        }
        catch(PropertyVetoException e) {
            infoMessageBox(e.getMessage());
        }
        
        fitAppSize(image);
    }
    
    private void openImageFile() {
        new Thread(new Runnable() {
            public void run() {
                if(openFileChooser.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) { 
                    File[] files = openFileChooser.getSelectedFiles();
                    
                    for(int i = 0; i < files.length; i++) {
                        // bring it to top
                        try {
                            Image image = ImageIO.read(files[i]);
                            JInternalFrame internalFrame = createImageInternalFrame(files[i].getAbsolutePath(), image);
                            
                            getDesktopPane().add(internalFrame);
                            
                            internalFrame.setVisible(true);
                            internalFrame.setSelected(true);

                            fitAppSize(image);
                        }
                        catch(IOException e) {
                            infoMessageBox(e.getMessage());
                        }
                        catch(PropertyVetoException e) {
                            infoMessageBox(e.getMessage());
                        }
                    }
                }
            }
        }).start();
    }
    
    private void saveImageFile() {
        String title = getDesktopPane().getSelectedFrame().getTitle();
        
        if(title.equals("*untitled") || title.equals("untitled")) {
            saveImageFileAs();
        }
        else if(title.startsWith("*")){
            save(title.substring(1));
        }
    }
    
    private void saveImageFileAs() {
        if(saveFileChooser.showSaveDialog(null) == JFileChooser.APPROVE_OPTION) {
            File file = saveFileChooser.getSelectedFile();
            String filename = file.toString();
            String lowerCaseFilename = filename.toLowerCase();
            // the default extension filename is 'jpg'.
            if(!lowerCaseFilename.endsWith(".jpg") && !lowerCaseFilename.endsWith(".png")) {
                filename = filename + ".jpg";
                file = new File(filename);
            }
            
            if(file.exists()) {
                boolean isSaveAs = true;
                
                while(isSaveAs) {
                    int option = JOptionPane.showOptionDialog(null, 
                            filename + " exists, overwrite?", "overwrite?", JOptionPane.YES_NO_CANCEL_OPTION,
                            JOptionPane.QUESTION_MESSAGE, smallLogo, null, null);
                    
                    switch(option) {
                        case JOptionPane.YES_OPTION:
                            isSaveAs = false;
                            break;                   
                        case JOptionPane.NO_OPTION:
                            if(saveFileChooser.showSaveDialog(null) == JFileChooser.APPROVE_OPTION) {
                                file = saveFileChooser.getSelectedFile();
                                filename = file.toString();
                            }
                            else {
                                isSaveAs = false;
                            }
                            break;
                        case JOptionPane.CANCEL_OPTION:
                            // cancell save action
                            return;     
                    }   
                }
            }
            
            save(filename);
        }        
    }
    
    private void save(String filename) {
        CanvasComponent canvas = getCanvasOfSelectedFrame();
        Image image = canvas.getImage();

        // create BufferedImage for ImageIO
        BufferedImage bufferedImage = new BufferedImage(image.getWidth(null), 
                image.getHeight(null), BufferedImage.TYPE_INT_RGB);
        Graphics g = bufferedImage.getGraphics();
        g.drawImage(image, 0, 0, null);
        
        try {
            // decide the extension filename
            int dotpos = filename.lastIndexOf('.');
            ImageIO.write(bufferedImage, filename.substring(dotpos + 1), new File(filename));
        }
        catch(IOException e) {
            infoMessageBox(e.getMessage());
        }
        
        getDesktopPane().getSelectedFrame().setTitle(filename);
    }
    
    private void saveAllImageFile() {
        if(getDesktopPane().getAllFrames().length == 0)
            return;
        
        final IBatcher batcher = new IBatcher() {
            public void execute() {
                saveImageFile();
            }
        };
        
        new Thread(new Runnable() {
            public void run() {
                batch(batcher);
            }
        }).start();
    }
    
    private void checkUnsavedImages() {
        JInternalFrame[] internalFrames = getDesktopPane().getAllFrames();
        
        for(int i = 0; i < internalFrames.length; i++) {
            try {
                internalFrames[i].setIcon(false);
                internalFrames[i].setSelected(true);
                if(checkUnsavedImage(internalFrames[i])) {
                    return;
                }
            }
            catch(PropertyVetoException e) {
                infoMessageBox(e.getMessage());
            }
        }
        
        // check all images ok, now quit the application.
        if(getDesktopPane().getAllFrames().length == 0)
            System.exit(0);
    }

    private boolean checkUnsavedImage(JInternalFrame internalFrame) {
        boolean cancel = false;
        
        if(internalFrame.getTitle().startsWith("*")) {
            int option = JOptionPane.showOptionDialog(null, 
                    internalFrame.getTitle().substring(1) + " is unsaved, save?", "save?", JOptionPane.YES_NO_CANCEL_OPTION,
                    JOptionPane.QUESTION_MESSAGE, smallLogo, null, null);
            
            switch(option) {
                case JOptionPane.YES_OPTION:
                    try {
                        internalFrame.setSelected(true);
                        saveImageFile();
                        
                        if(!internalFrame.getTitle().startsWith("*")) {
                            removeMementoAndDispose(internalFrame);
                        }
                    }
                    catch(PropertyVetoException e) {
                        infoMessageBox(e.getMessage());
                    }
                    break;                   
                case JOptionPane.NO_OPTION:
                    removeMementoAndDispose(internalFrame);
                    break;
                case JOptionPane.CANCEL_OPTION:
                    // cancell quit action
                    cancel = true;
                    break;
            }   
        }
        else {
            removeMementoAndDispose(internalFrame);
        }
        
        return cancel;
    }
    
    private void removeMementoAndDispose(JInternalFrame internalFrame) {
        CanvasComponent canvas = getCanvasOfInternalFrame(internalFrame);
        getMementoManagers().remove(canvas);
        internalFrame.setVisible(false);
        internalFrame.dispose();
    }
    
    public InternalFrameListener getInternalFrameListener() {
        return internalFrameListener;
    }
    
    public WindowListener getWindowListener() {
        return windowListener;
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -