📄 columnbuttonscrollpane.java
字号:
package tame.panel;import java.awt.Component;import java.awt.Graphics;import java.awt.GridLayout;import java.awt.Insets;import java.awt.SystemColor;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.util.Stack;import javax.swing.JButton;import javax.swing.JPanel;import javax.swing.JScrollPane;import javax.swing.JTable;import javax.swing.SwingConstants;import javax.swing.UIManager;import javax.swing.table.JTableHeader;import javax.swing.table.TableColumn;import javax.swing.table.TableColumnModel;import tame.border.LinesBorder;import tame.icon.ArrowIcon;import tame.layout.ColumnButtonScrollPaneLayout;/**@author Nobuo Tamemasa@version 1.0 05/31/99*/public class ColumnButtonScrollPane extends JScrollPane { Component columnButton; public ColumnButtonScrollPane(JTable table) { super(table); TableColumnModel cm = table.getColumnModel(); LimitedTableHeader header = new LimitedTableHeader(cm); table.setTableHeader(header); columnButton = createUpperCorner(header); setCorner(UPPER_RIGHT_CORNER, columnButton); setVerticalScrollBarPolicy(VERTICAL_SCROLLBAR_ALWAYS); ColumnButtonScrollPaneLayout layout = new ColumnButtonScrollPaneLayout(); setLayout(layout); layout.syncWithScrollPane(this); } protected Component createUpperCorner(JTableHeader header) { ColumnButton corner = new ColumnButton(header); return corner; } public class LimitedTableHeader extends JTableHeader { public LimitedTableHeader(TableColumnModel cm) { super(cm); } // actually, this is a not complete way. but easy one. // you can see last column painted wider, short time :) // If you don't like this kind cheap fake, // you have to overwrite the paint method in UI class. public void paintComponent(Graphics g) { super.paintComponent(g); columnButton.repaint(); } } public class ColumnButton extends JPanel { JTable table; TableColumnModel cm; JButton revealButton; JButton hideButton; Stack stack; public ColumnButton(JTableHeader header) { setLayout(new GridLayout(1,2)); setBorder(new LinesBorder(SystemColor.controlShadow, new Insets(0,1,0,0))); stack = new Stack(); table = header.getTable(); cm = table.getColumnModel(); revealButton = createButton(header, SwingConstants.WEST); hideButton = createButton(header, SwingConstants.EAST); add(revealButton); add(hideButton); revealButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { TableColumn column = (TableColumn)stack.pop(); cm.addColumn(column); if (stack.empty()) { revealButton.setEnabled(false); } hideButton.setEnabled(true); table.sizeColumnsToFit(-1); } }); hideButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { int n = cm.getColumnCount(); TableColumn column = cm.getColumn(n -1); stack.push(column); cm.removeColumn(column); if (n < 3) { hideButton.setEnabled(false); } revealButton.setEnabled(true); table.sizeColumnsToFit(-1); } }); if (1 < cm.getColumnCount()) { hideButton.setEnabled(true); } else { hideButton.setEnabled(false); } revealButton.setEnabled(false); } protected JButton createButton(JTableHeader header, int direction) { //int iconHeight = header.getPreferredSize().height - 6; int iconHeight = 8; JButton button = new JButton(); button.setIcon(new ArrowIcon(iconHeight, direction, true)); button.setDisabledIcon(new ArrowIcon(iconHeight, direction, false)); button.setRequestFocusEnabled(false); button.setForeground(header.getForeground()); button.setBackground(header.getBackground()); button.setBorder(UIManager.getBorder("TableHeader.cellBorder")); return button; } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -