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?


  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
  •