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

📄 treetable.java

📁 world wind java sdk 源码
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/*
Copyright (C) 2001, 2008 United States Government as represented by
the Administrator of the National Aeronautics and Space Administration.
All Rights Reserved.
*/
package gov.nasa.worldwind.applications.gio.catalogui.treetable;

import gov.nasa.worldwind.util.Logging;

import javax.swing.*;
import javax.swing.border.Border;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.table.TableCellRenderer;
import javax.swing.tree.*;
import java.awt.*;
import java.awt.event.InputEvent;
import java.awt.event.MouseEvent;
import java.util.EventObject;

/**
 * @author dcollins
 * @version $Id$
 */
public class TreeTable extends JTable
{
    private TreeTableModel treeTableModel;
    protected TreeTableCellRenderer tree;
    private boolean askIfTreeEditable;
    private boolean isTreeEditable;

    public TreeTable(TreeTableModel model)
    {
        if (model == null)
        {
            String message = "nullValue.ModelIsNull";
            Logging.logger().severe(message);
            throw new IllegalArgumentException(message);
        }

        this.treeTableModel = model;
        this.tree = new TreeTableCellRenderer(new TreeModelAdapter(this.treeTableModel));
        super.setModel(new TableModelAdapter(this.treeTableModel, this.tree));
        ToolTipManager.sharedInstance().registerComponent(this.tree);

        ListToTreeSelectionModelWrapper selectionWrapper = new ListToTreeSelectionModelWrapper();
        this.tree.setSelectionModel(selectionWrapper);
        setSelectionModel(selectionWrapper.getListSelectionModel());

        setDefaultRenderer(TreeTableModel.class, this.tree);
        setDefaultEditor(TreeTableModel.class, new TreeTableCellEditor());

        setShowGrid(false);
        setIntercellSpacing(new Dimension(0, 0));

        if (this.tree.getRowHeight() < 1)
        {
            setRowHeight(20);
        }
    }

    public TreeTableModel getTreeTableModel()
    {
        return this.treeTableModel;
    }

    public JTree getTree()
    {
        return this.tree;
    }

    public TreeCellRenderer getTreeCellRenderer()
    {
        return this.tree.getCellRenderer();
    }

    public void setTreeCellRenderer(TreeCellRenderer x)
    {
        this.tree.setCellRenderer(x);
    }

    public boolean isAskIfTreeEditable()
    {
        return this.askIfTreeEditable;
    }

    public void setAskIfTreeEditable(boolean askIfTreeEditable)
    {
        this.askIfTreeEditable = askIfTreeEditable;
    }

    public boolean isTreeEditable()
    {
        return this.isTreeEditable;
    }

    public void setTreeEditable(boolean treeEditable)
    {
        this.isTreeEditable = treeEditable;
    }

    public int getEditingRow()
    {
        return getColumnClass(this.editingColumn) == TreeTableModel.class ? -1 : this.editingRow;
    }

    protected int realEditingRow()
    {
        return this.editingRow;
    }

    public boolean editCellAt(int row, int column, EventObject e)
    {
        boolean retValue = super.editCellAt(row, column, e);
        if (retValue && getColumnClass(column) == TreeTableModel.class)
        {
            repaint(getCellRect(row, column, false));
        }
        return retValue;
    }

    public void sizeColumnsToFit(int resizingColumn)
    {
        super.sizeColumnsToFit(resizingColumn);
        if (getEditingColumn() != -1 && getColumnClass(this.editingColumn) == TreeTableModel.class)
        {
            Rectangle cellRect = getCellRect(realEditingRow(), getEditingColumn(), false);
            Component component = getEditorComponent();
            component.setBounds(cellRect);
            component.validate();
        }
    }

    public void setRowHeight(int rowHeight)
    {
        super.setRowHeight(rowHeight);
        if (this.tree != null && this.tree.getRowHeight() != rowHeight)
        {
            this.tree.setRowHeight(getRowHeight());
        }
    }

    public void updateUI()
    {
        super.updateUI();
        if (this.tree != null)
        {
            this.tree.updateUI();
            //setDefaultEditor(TreeTableModel.class, new TreeTableCellEditor());
        }
        LookAndFeel.installColorsAndFont(this, "Tree.background", "Tree.foreground", "Tree.font");
    }

    class TreeTableCellRenderer extends JTree implements TableCellRenderer
    {
        protected int visibleRow;
        protected Object realCellValue;
        protected Border highlightBorder;

        public TreeTableCellRenderer(TreeModel model)
        {
            super(model);
        }

        public String convertValueToText(Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus)
        {
            String text = null;
            if (this.realCellValue != null)
                text = this.realCellValue.toString();
            if (text == null)
                text = super.convertValueToText(value, selected, expanded, leaf, row, hasFocus);
            return text;
        }

        public String getToolTipText(MouseEvent event)
        {
            event.translatePoint(0, this.visibleRow * getRowHeight());
            return super.getToolTipText(event);
        }

        public void setRowHeight(int rowHeight)
        {
            if (rowHeight > 0)
            {
                super.setRowHeight(rowHeight);
                if (TreeTable.this.getRowHeight() != rowHeight)
                {
                    TreeTable.this.setRowHeight(getRowHeight());
                }
            }
        }

        public void setBounds(int x, int y, int w, int h)
        {
            super.setBounds(x, 0, w, TreeTable.this.getHeight());
        }

        public void paint(Graphics g)
        {
            if (g == null)
            {
                String message = "nullValue.GraphicsIsNull";
                Logging.logger().severe(message);
                throw new IllegalArgumentException(message);
            }

            g.translate(0, -this.visibleRow * getRowHeight());
            super.paint(g);
            if (this.highlightBorder != null)
            {
                this.highlightBorder.paintBorder(this, g, 0, visibleRow * getRowHeight(), getWidth(), getRowHeight());
            }
        }

        public void updateUI()
        {
            super.updateUI();
            TreeCellRenderer tcr = getCellRenderer();
            if (tcr instanceof DefaultTreeCellRenderer)
            {
                DefaultTreeCellRenderer dtcr = ((DefaultTreeCellRenderer) tcr);
                dtcr.setTextSelectionColor(UIManager.getColor("Table.selectionForeground"));
                dtcr.setBackgroundSelectionColor(UIManager.getColor("Table.selectionBackground"));
            }
        }

        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus,
                                                       int row, int column)
        {
            if (table == null)
            {
                String message = "nullValue.TableIsNull";
                Logging.logger().severe(message);
                throw new IllegalArgumentException(message);
            }

            this.realCellValue = value;

            Color background;
            Color foreground;
            if (isSelected)
            {
                background = table.getSelectionBackground();
                foreground = table.getSelectionForeground();
            }
            else
            {
                background = table.getBackground();
                foreground = table.getForeground();
            }

            this.highlightBorder = null;
            if (TreeTable.this.realEditingRow() == row && TreeTable.this.getEditingColumn() == column)
            {
                background = UIManager.getColor("Table.focusCellBackground");
                foreground = UIManager.getColor("Table.focusCellForeground");
            }
            else if (hasFocus)
            {
                this.highlightBorder = UIManager.getBorder("Table.focusCellHighlightBorder");
                if (TreeTable.this.isCellEditable(row, column))
                {
                    background = UIManager.getColor("Table.focusCellBackground");
                    foreground = UIManager.getColor("Table.focusCellForeground");
                }
            }

            this.visibleRow = row;

⌨️ 快捷键说明

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