Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Kết quả 1 đến 3 của 3
  1. #1
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    Làm phần mềm xem ảnh trong Java Swing?

    Hiện tại mình đang làm đò án về java swing với chủ đề là trình xem ảnh! Với các chức năng như mở file, next, prev, show ảnh, properties, phóng to, thu nhỏ... tương tự như trình xem ảnh trong windows. Do còn hạn chế nên Mong các bạn giúp đỡ! Cảm ơn nhiều!

  2. #2
    Bạn thử code này xem


    Mã:
    import java.awt.*;import java.awt.event.*;import java.awt.image.*;import javax.swing.*; import java.io.File;import java.util.List;import java.util.ArrayList;import java.util.Iterator; /** * ImageViewer is the main class of the image viewer application. It builds and * displays the application GUI and initialises all other components. *  * To start the application, create an object of this class. *  * @author Michael Kölling and David J. Barnes. * @version 2.0 */public class ImageViewer{    // static fields:    private static final String VERSION = "Version 2.0";    private static JFileChooser fileChooser = new JFileChooser(System.getProperty("user.dir"));     // fields:    private JFrame frame;    private ImagePanel imagePanel;    private JLabel filenameLabel;    private JLabel statusLabel;    private OFImage currentImage;        private List<Filter> filters;        /**     * Create an ImageViewer show it on screen.     */    public ImageViewer()    {        currentImage = null;        filters = createFilters();        makeFrame();    }      // ---- implementation of menu functions ----        /**     * Open function: open a file chooser to select a new image file.     */    private void openFile()    {        int returnVal = fileChooser.showOpenDialog(frame);         if(returnVal != JFileChooser.APPROVE_OPTION) {            return;  // cancelled        }        File selectedFile = fileChooser.getSelectedFile();        currentImage = ImageFileManager.loadImage(selectedFile);         if(currentImage == null) {   // image file was not a valid image            JOptionPane.showMessageDialog(frame,                    "The file was not in a recognized image file format.",                    "Image Load Error",                    JOptionPane.ERROR_MESSAGE);            return;        }                imagePanel.setImage(currentImage);        showFilename(selectedFile.getPath());        showStatus("File loaded.");        frame.pack();    }        /**     * Close function: close the current image.     */    private void close()    {        currentImage = null;        imagePanel.clearImage();        showFilename(null);    }        /**     * Quit function: quit the application.     */    private void quit()    {        System.exit(0);    }            /**     * Apply a given filter to the current image.     * @param filter The filter to be applied.     */    private void applyFilter(Filter filter)    {        if(currentImage != null) {            filter.apply(currentImage);            frame.repaint();            showStatus("Applied: " + filter.getName());        }        else {            showStatus("No image loaded.");        }    }        /**     * 'Lighter' function: make the picture lighter     */    private void showAbout()    {        JOptionPane.showMessageDialog(frame,                     "ImageViewer
    " + VERSION,                    "About ImageViewer",                     JOptionPane.INFORMATION_MESSAGE);    }            // ---- support methods ----     /**     * Display a file name on the appropriate label.     * @param filename The file name to be displayed.     */    private void showFilename(String filename)    {        if(filename == null) {            filenameLabel.setText("No file displayed.");        }        else {            filenameLabel.setText("File: " + filename);        }    }        /**     * Display a status message in the frame's status bar.     */    private void showStatus(String text)    {        statusLabel.setText(text);    }        /**     * Create and return a list with all the known filters.     * @return The list of filters.     */    private List<Filter> createFilters()    {        List<Filter> filterList = new ArrayList<Filter>();        filterList.add(new DarkerFilter("Darker"));        filterList.add(new LighterFilter("Lighter"));        filterList.add(new ThresholdFilter("Threshold"));                return filterList;    }        // ---- swing stuff to build the frame and all its components ----        /**     * Create the Swing frame and its content.     */    private void makeFrame()    {        frame = new JFrame("ImageViewer");        Container contentPane = frame.getContentPane();                makeMenuBar(frame);                // Specify the layout manager with nice spacing        contentPane.setLayout(new BorderLayout(6, 6));                filenameLabel = new JLabel();        contentPane.add(filenameLabel, BorderLayout.NORTH);         imagePanel = new ImagePanel();        contentPane.add(imagePanel, BorderLayout.CENTER);         statusLabel = new JLabel(VERSION);        contentPane.add(statusLabel, BorderLayout.SOUTH);                // building is done - arrange the components and show                showFilename(null);        frame.pack();                // center the frame on screen        Dimension d = Toolkit.getDefaultToolkit().getScreenSize();        frame.setLocation(d.width/2 - frame.getWidth()/2, d.height/2 - frame.getHeight()/2);        frame.setVisible(true);    }        /**     * Create the main frame's menu bar.     * @param frame   The frame that the menu bar should be added to.     */    private void makeMenuBar(JFrame frame)    {        final int SHORTCUT_MASK =            Toolkit.getDefaultToolkit().getMenuShortcutKeyMask();          JMenuBar menubar = new JMenuBar();        frame.setJMenuBar(menubar);                JMenu menu;        JMenuItem item;                // create the File menu        menu = new JMenu("File");        menubar.add(menu);                item = new JMenuItem("Open");            item.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, SHORTCUT_MASK));            item.addActionListener(new ActionListener() {                               public void actionPerformed(ActionEvent e) { openFile(); }                           });        menu.add(item);         item = new JMenuItem("Close");            item.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_W, SHORTCUT_MASK));            item.addActionListener(new ActionListener() {                               public void actionPerformed(ActionEvent e) { close(); }                           });        menu.add(item);        menu.addSeparator();                item = new JMenuItem("Quit");            item.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Q, SHORTCUT_MASK));            item.addActionListener(new ActionListener() {                               public void actionPerformed(ActionEvent e) { quit(); }                           });        menu.add(item);          // create the Filter menu        menu = new JMenu("Filter");        menubar.add(menu);                for(final Filter filter : filters) {            item = new JMenuItem(filter.getName());            item.addActionListener(new ActionListener() {                                public void actionPerformed(ActionEvent e) {                                     applyFilter(filter);                                }                           });             menu.add(item);         }         // create the Help menu        menu = new JMenu("Help");        menubar.add(menu);                item = new JMenuItem("About ImageViewer...");            item.addActionListener(new ActionListener() {                               public void actionPerformed(ActionEvent e) { showAbout(); }                           });        menu.add(item);     }}
    Hoặc

    Mã:
    import javax.swing.*;import javax.swing.border.Border;import java.awt.*;import java.awt.datatransfer.DataFlavor;import java.awt.datatransfer.Transferable;import java.awt.datatransfer.UnsupportedFlavorException;import java.io.IOException;import java.io.Serializable; public class ImagePreviewListTest {     public static void main(String[] args) throws Exception {        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());        JFrame frame = new JFrame("Image panel");        frame.setSize(800, 300);        frame.setLocationByPlatform(true);        JList imageList = createImageList();        frame.getContentPane().add(new JScrollPane(imageList));        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);        frame.setVisible(true);    }     private static JList createImageList() {         JList imageList = new JList(createModel());        imageList.setCellRenderer(new ImageCellRenderer());        imageList.setLayoutOrientation(JList.HORIZONTAL_WRAP);        imageList.setVisibleRowCount(-1);        imageList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);        imageList.setFixedCellWidth(240);        imageList.setFixedCellHeight(120);         imageList.setDragEnabled(true);        imageList.setDropMode(DropMode.INSERT);        imageList.setTransferHandler(new ImageTransferHandler(imageList));         return imageList;}     private static DefaultListModel createModel() {        DefaultListModel model = new DefaultListModel();        model.addElement(new ColorIcon(Color.RED));        model.addElement(new ColorIcon(Color.GREEN));        model.addElement(new ColorIcon(Color.BLACK));        model.addElement(new ColorIcon(Color.BLUE));        model.addElement(new ColorIcon(Color.MAGENTA));        model.addElement(new ColorIcon(Color.PINK));        model.addElement(new ColorIcon(Color.YELLOW));        model.addElement(new ColorIcon(Color.ORANGE));        return model;    }     static class ImageTransferHandler extends TransferHandler {         private static final DataFlavor DATA_FLAVOUR = new DataFlavor(ColorIcon.class, "Images");         private final JList previewList;        private boolean inDrag;         ImageTransferHandler(JList previewList) {            this.previewList = previewList;        }         public int getSourceActions(JComponent c) {            return TransferHandler.MOVE;        }         protected Transferable createTransferable(JComponent c) {            inDrag = true;            return new Transferable() {                public DataFlavor[] getTransferDataFlavors() {                    return new DataFlavor[] {DATA_FLAVOUR};                }                 public boolean isDataFlavorSupported(DataFlavor flavor) {                    return flavor.equals(DATA_FLAVOUR);                }                 public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException {                    return previewList.getSelectedValue();                }            };        }         public boolean canImport(TransferSupport support) {            if (!inDrag || !support.isDataFlavorSupported(DATA_FLAVOUR)) {                return false;            }             JList.DropLocation dl = (JList.DropLocation)support.getDropLocation();            if (dl.getIndex() == -1) {                return false;            } else {                return true;            }        }         public boolean importData(TransferSupport support) {            if (!canImport(support)) {                return false;            }             Transferable transferable = support.getTransferable();            try {                Object draggedImage = transferable.getTransferData(DATA_FLAVOUR);                 JList.DropLocation dl = (JList.DropLocation)support.getDropLocation();                DefaultListModel model = (DefaultListModel)previewList.getModel();                int dropIndex = dl.getIndex();                if (model.indexOf(draggedImage) < dropIndex) {                    dropIndex--;                }                model.removeElement(draggedImage);                model.add(dropIndex, draggedImage);                return true;            } catch (Exception e) {                e.printStackTrace();                return false;            }        }         protected void exportDone(JComponent source, Transferable data, int action) {            super.exportDone(source, data, action);            inDrag = false;        }    }     static class ImageCellRenderer extends JPanel implements ListCellRenderer {         DefaultListCellRenderer defaultListCellRenderer = new DefaultListCellRenderer();        JLabel imageLabel = new JLabel();        JLabel descriptionLabel = new JLabel();         ImageCellRenderer() {            setLayout(new BorderLayout());            Border emptyBorder = BorderFactory.createEmptyBorder(5, 5, 5, 5);            imageLabel.setBorder(emptyBorder);            descriptionLabel.setBorder(emptyBorder);            add(imageLabel, BorderLayout.CENTER);            add(descriptionLabel, BorderLayout.SOUTH);        }         public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {            defaultListCellRenderer.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);            setBorder(defaultListCellRenderer.getBorder());            setBackground(defaultListCellRenderer.getBackground());            imageLabel.setIcon((Icon)value);            descriptionLabel.setText("Description");            return this;        }    }     static class ColorIcon implements Icon, Serializable {        private Color color;         ColorIcon(Color color) {            this.color = color;        }         public void paintIcon(Component c, Graphics g, int x, int y) {            g.setColor(color);            g.fillRect(x, y, getIconWidth(), getIconHeight());        }         public int getIconWidth() {            return 200;        }         public int getIconHeight() {            return 100;        }         public boolean equals(Object o) {            if (o == null || getClass() != o.getClass()) {                return false;            }            return color.equals(((ColorIcon)o).color);        }     }}

  3. #3
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Cảm ơn bạn, nhưng cái code đầu tiên chạy không được do thiếu nhiều class nên chưa test được!! Còn code 2 thì k giống như ý mình! Có thể góp ý thêm cho mình được không ak!

 

 

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •