📄 list.java
字号:
package java.awt;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.ItemEvent;import java.awt.event.ItemListener;import java.awt.event.KeyEvent;import java.awt.event.KeyListener;import java.awt.event.MouseEvent;import java.awt.event.MouseListener;import java.awt.event.MouseMotionListener;import java.util.BitSet;import java.util.Vector;/** * class List - * * Copyright (c) 1998 * Transvirtual Technologies, Inc. All rights reserved. * * See the file "license.terms" for information on usage and redistribution * of this file. */public class List extends Container implements ItemSelectable{ final private static long serialVersionUID = -3304312411574666869L; ActionListener aListener; ItemListener iListener; ItemPane ip = new ItemPane(); Vector selections = new Vector( 1); boolean multipleMode; boolean selMouse; int sel = -1; BitSet multiSel; int nSel;class ItemPane extends RowCanvas implements MouseListener, MouseMotionListener, KeyListener{ StringBuffer lnsBuf = new StringBuffer(); int idxFlyOver = -1;public ItemPane () { this.addKeyListener( this); this.addMouseListener( this); this.addMouseMotionListener( this); this.addFocusListener( this);}public void keyPressed( KeyEvent e) { int nIdx; int mods = e.getModifiers(); if ( this.parent.keyListener != null ){ // give our parent a chance to intercept keystrokes // check for keyListeners first, it's a rare case redirectKeyEvent( e); } //do not consume unused key for HotKeyHandler if ( mods != 0 ) return; selMouse = false; switch ( e.getKeyCode() ) { case KeyEvent.VK_DOWN: nIdx = getSelectedIndex() + 1; this.makeVisible( nIdx); selectEvent( nIdx, true); break; case KeyEvent.VK_UP: nIdx = getSelectedIndex() - 1; this.makeVisible( nIdx); selectEvent( nIdx, true); break; case KeyEvent.VK_ENTER: notifyAction(); break; case KeyEvent.VK_PAGE_UP: this.makeVisible( first - getVisibleRows()); break; case KeyEvent.VK_PAGE_DOWN: this.makeVisible( first + 2 * getVisibleRows() - 1); break; case KeyEvent.VK_ESCAPE: clearSelections(); this.repaint(); break; default: return; } e.consume();}public void keyReleased( KeyEvent e) { if ( this.parent.keyListener != null ){ // check for keyListeners first, it's a rare case redirectKeyEvent( e); e.consume(); }}public void keyTyped( KeyEvent e) { int mods = e.getModifiers(); if ( (mods == 0) || (mods == KeyEvent.SHIFT_MASK ) ) { letterNav( e.getKeyChar(), e.isShiftDown() ); e.consume(); } if ( this.parent.keyListener != null ){ // check for keyListeners first, it's a rare case redirectKeyEvent( e); }}void letterNav( char c, boolean acc) { int rs = rows.size(); if ( !acc ) lnsBuf.setLength( 0); lnsBuf.append( c); for ( int i=0; i<rs; i++) { String s = (String)rows.elementAt( i); if ( s.regionMatches( true, 0, lnsBuf.toString(), 0, lnsBuf.length() ) ){ selectEvent( i, true); return; } }}int maxRowWidth() { int rs = rows.size(); int iw, mw = 0; for ( int i=0; i<rs; i++ ) { iw = fm.stringWidth( (String)rows.elementAt( i) ); if ( iw > mw ) mw = iw; } return mw;}public void mouseClicked( MouseEvent e) { if ( e.getClickCount() == 1) { int idx = getRowIdx( e.getY() ); if ( idx > -1 ) { selMouse = true; if ( isIndexSelected( idx) ) { if ( multipleMode ) deselectElement( idx, true, true); } else { selectEvent( idx, true); } } } else notifyAction(); redirectMouseEvent( e);}public void mouseDragged( MouseEvent e) { if ( this.parent.motionListener != null ){ // unlikely, check listener first redirectMotionEvent( e); }}public void mouseEntered( MouseEvent e) { redirectMouseEvent( e);}public void mouseExited( MouseEvent e) { if ( rgr != null ) // otherwise we aren't visible anymore updateFlyOver( -1); redirectMouseEvent( e);}public void mouseMoved( MouseEvent e) { int row = getRowIdx( e.getY() ); if ( row != idxFlyOver ) { updateFlyOver( row ); } if ( this.parent.motionListener != null ){ // unlikely, check listener first redirectMotionEvent( e); }}public void mousePressed( MouseEvent e) { if ( AWTEvent.keyTgt != ip ) ip.requestFocus(); if ( e.isPopupTrigger() ) this.triggerPopup( e.getX(), e.getY()); redirectMouseEvent( e);}public void mouseReleased( MouseEvent e) { redirectMouseEvent( e);}public void paint ( Graphics g ) { repaintRows( g, first, getVisibleRows() ); this.kaffePaintBorder( g);}void repaintItem( Graphics g, int idx) { if ( g == null) return; int d = BORDER_WIDTH; int x0 = xOffs + d +2; int y0 = d + ( idx - first) * rowHeight; int y1 = y0 + rowHeight - (rowHeight - fm.getHeight())/2 - fm.getDescent(); String s = (String)rows.elementAt( idx); if ( isIndexSelected( idx) ) { g.setColor( Defaults.ListSelBgClr); g.fill3DRect( d, y0, this.width-2*d, rowHeight, true); g.setColor( Defaults.ListSelTxtClr); } else if ( idx == idxFlyOver ) { g.setColor( Defaults.ListFlyOverBgClr); g.fill3DRect( d, y0, this.width-2*d, rowHeight, !Defaults.ListFlyOverInset); g.setColor( Defaults.ListFlyOverTxtClr); } else { g.setColor( this.bgClr ); g.fillRect( d, y0, this.width-2*d, rowHeight); g.setColor( this.fgClr ); } g.drawString( s, x0, y1);}void repaintItem( int idx) { if ( rgr != null ) repaintItem( rgr, idx);}void repaintRow( Graphics g, int idx) { repaintItem( g, idx);}public void setFont( Font fnt) { fm = this.getFontMetrics( fnt); rowHeight = fm.getHeight() + 1; super.setFont( fnt);}void updateFlyOver( int newIdx) { int lov = idxFlyOver; idxFlyOver = newIdx; if ( lov == newIdx ) return; int rs = rows.size(); if ( (lov > -1) && (lov < rs) ) repaintItem( lov); if ( (newIdx > -1) && (newIdx < rs) ) repaintItem( newIdx);}}public List () { this( 4, false);}public List ( int rows) { this( rows, false);}public List ( int rows, boolean multipleMode) { setMultipleMode( multipleMode); setLayout( null); setForeground( Defaults.ListTxtClr); setBackground( Defaults.ListBgClr); setFont( Defaults.ListFont); add( ip.vScroll = new Scrollbar( Scrollbar.VERTICAL,0,0,0,0)); add( ip.hScroll = new Scrollbar( Scrollbar.HORIZONTAL,0,0,0,0)); add( ip); ip.setListeners();}public void add ( PopupMenu m) { ip.add( m);}public void add ( String item) { addElement( item, -1);}public synchronized void add ( String item, int index) { addElement( item, index);}public synchronized void addActionListener ( ActionListener l) { aListener = AWTEventMulticaster.add( aListener, l);}void addElement ( String item, int index) { if ( index == -1 ) ip.rows.addElement( item); else ip.rows.insertElementAt( item, index); ip.updateScrolls(); if ( isShowing() ) ip.repaint();}public void addItem ( String item) { addElement( item, -1);}public synchronized void addItem ( String item, int index) { addElement( item, index);}public synchronized void addItemListener ( ItemListener l) { iListener = AWTEventMulticaster.add( iListener, l);}/** * @deprecated */public boolean allowsMultipleSelections() { return multipleMode;}/** * @deprecated */public synchronized void clear() { clearSelections(); ip.rows.removeAllElements(); ip.first = 0; ip.updateScrolls(); ip.repaint();}void clearSelection ( int index ) { if ( sel == index ) sel = -1; if ( multipleMode ) { if (multiSel.get(index)) { multiSel.clear( index); nSel--; } }}void clearSelections () { sel = -1; nSel = 0; if ( multipleMode ){ nSel = 0; multiSel = new BitSet( ip.rows.size()); }}/** * @deprecated */public int countItems() { return ip.rows.size();}public synchronized void delItem ( int index) { removeElement( index);}/** * @deprecated */public synchronized void delItems ( int start, int end ) { for (int i = end; i >= start; i--) { remove(i); }}public synchronized void deselect ( int index) { deselectElement( index, true, false);}void deselectElement ( int index, boolean repaint, boolean fire) { try { Object item = ip.rows.elementAt( index); clearSelection( index); if ( repaint) ip.repaintRows( index, 1); if (fire) { notifyItem( new Integer(index), ItemEvent.DESELECTED); } } catch ( Exception e) {}}public void doLayout () { ip.innerLayout();}public Color getBackground () { // some anomaly, we forward colors to our ip, so we should return its colors // for consistencies sake
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -