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

📄 filepanel.java

📁 基于MPEG 7 标准,符合未来语义网架构,很值得参考
💻 JAVA
字号:
/*
 * This file is part of Caliph & Emir.
 *
 * Caliph & Emir is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * Caliph & Emir is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with Caliph & Emir; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 *
 * Copyright statement:
 * --------------------
 * (c) 2002-2005 by Mathias Lux (mathias@juggle.at)
 * http://www.juggle.at, http://caliph-emir.sourceforge.net
 */
package at.lux.fotoannotation.panels;

import at.lux.fotoannotation.AnnotationFrame;
import at.lux.fotoannotation.FileTableModel;
import at.lux.fotoannotation.utils.ImageFileFilter;

import javax.swing.*;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.table.DefaultTableCellRenderer;
import java.awt.*;
import java.io.File;
import java.io.IOException;

public class FilePanel extends JPanel {
    private File directory;
    private JTable files;
    private FileTableModel ftm;
    private AnnotationFrame parent;

    public FilePanel(File directory, AnnotationFrame parent) {
        super(new BorderLayout());
        this.parent = parent;
        this.directory = directory;
        ftm = new FileTableModel(directory);
        files = new JTable(ftm);
        files.setDefaultRenderer(Object.class, new DefaultTableCellRenderer() {
            /**
             * Returns the default table cell renderer.
             *
             * @param table      the <code>JTable</code>
             * @param value      the value to assign to the cell at
             *                   <code>[row, column]</code>
             * @param isSelected true if cell is selected
             * @param row        the row of the cell to render
             * @param column     the column of the cell to render
             * @return the default table cell renderer
             */
            public Component getTableCellRendererComponent(JTable table, Object value,
                                                           boolean isSelected, boolean hasFocus, int row, int column) {
                JLabel label = (JLabel) super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
                if (value.toString().startsWith("[")) {  //  Render roots bold
                    label.setFont(label.getFont().deriveFont(Font.BOLD));
                } else if (value.toString().toLowerCase().endsWith(".jpg")) {   // Render image files italic
                    label.setFont(label.getFont().deriveFont(Font.ITALIC));
                } else
                    label.setFont(label.getFont().deriveFont(Font.BOLD)); // Redner directories bold!
                return label;
            }
        });
        ListSelectionModel lsm = files.getSelectionModel();
        lsm.addListSelectionListener(new ListSelectionListener() {
            public void valueChanged(ListSelectionEvent e) {
                if (e.getValueIsAdjusting()) return;

                ListSelectionModel lsm1 =
                        (ListSelectionModel) e.getSource();
                if (lsm1.isSelectionEmpty()) {
                    //no rows are selected
                } else {
                    int selectedRow = lsm1.getMinSelectionIndex();
                    debug("Selection changed: " + selectedRow);
                    selectNewFile(selectedRow);
                }
            }
        });
        this.add(new JScrollPane(files), BorderLayout.CENTER);
    }

    private void selectNewFile(int row) {
        String fname = files.getValueAt(row, 0).toString();
        File toOpen = null;
        if (fname.equals("..")) { // eines hinaufgehen ...
            try {
                directory = directory.getCanonicalFile().getParentFile();
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                ftm.setNewDirectory(directory);
                parent.setStatus("Changed to directory " + directory.toString());
                ftm.fireTableDataChanged();
            } catch (Exception e) {
                parent.setStatus("Error " + e.toString());
                debug("Error " + e.toString());
                // e.printStackTrace();
            }
        } else if (fname.indexOf('[') != 0) { // normales directory oder img-file
            File[] farray = directory.listFiles(new ImageFileFilter());
            for (int i = 0; i < farray.length; i++) {
                File file = farray[i];
                if (file.getName().equals(fname))
                    toOpen = file;
            }
        } else { // root (Laufwerk oder so)
            toOpen = new File(fname.substring(1, fname.length() - 1));
            parent.setStatus("Change to root " + toOpen.toString());
            // setting current directory:
            directory = toOpen;
            ftm.setNewDirectory(toOpen);
            ftm.fireTableDataChanged();
            toOpen = null;
        }
        if (toOpen != null) {
            if (toOpen.isDirectory()) {
                // setting current directory:
                directory = toOpen;
                ftm.setNewDirectory(directory);
                ftm.fireTableDataChanged();
                parent.setStatus("Changed to directory " + toOpen.toString());
            } else {
                try {
                    parent.setCurrentFile(toOpen);
                    debug("opening image file " + toOpen.toString());
                } catch (IOException e) {
                    debug("An Error occured: " + e.toString());
                    // e.printStackTrace();
                }
            }
        } else {
            debug("Selected file not opened!");
        }
    }

    private void debug(String message) {
        if (AnnotationFrame.DEBUG) System.out.println("[at.lux.fotoannotation.panels.FilePanel] " + message);
    }
}

⌨️ 快捷键说明

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