📄 tabpan.java
字号:
import java.awt.*;
import java.util.*;
public class TabPan
extends Panel
{
private Panel contentPane;
private CardLayout cl;
private Vector nameList;
private int selIdx = 0;
private Vector xList;
private int hTabs;
private int wTabs;
public Dimension preferredSize()
{
return minimumSize();
}
public Dimension minimumSize()
{
Dimension d = contentPane.minimumSize();
return new Dimension( Math.max( d.width, wTabs ), hTabs + d.height );
}
public int getSelectedIndex()
{
return selIdx;
}
public TabPan()
{
contentPane = new Panel();
add( contentPane );
cl = new CardLayout();
contentPane.setLayout( cl );
nameList = new Vector();
xList = new Vector();
}
public void addT( String name, Component c )
{
int n;
String key;
n = nameList.size();
key = "" + n;
contentPane.add( key, c );
Lbl lbl = new Lbl( name );
add( lbl );
nameList.addElement( lbl );
if( n == 0 ) {
cl.show( contentPane, key );
}
}
public void layout()
{
int x, y;
int i, n;
int lineH;
Dimension D;
Component C;
xList.removeAllElements();
x = 2;
y = 1;
lineH = 1;
n = nameList.size();
for( i = 0; i < n; i++ )
{
C = (Component) nameList.elementAt( i );
D = C.preferredSize();
if( lineH < D.height )
lineH = D.height;
}
for( i = 0; i < n; i++ )
{
C = (Component) nameList.elementAt( i );
D = C.preferredSize();
C.reshape( x + 1, y, D.width, lineH );
x += D.width + 5;
xList.addElement( new Integer( x ) );
}
wTabs = x;
hTabs = lineH + 1;
x = 2;
y += lineH + 1;
D = size();
contentPane.reshape( x+1, y, D.width-4, D.height-4 - lineH );
}
public void showT( int idx )
{
selIdx = idx;
String key = "" + idx;
postEvent( new Event( this, Event.ACTION_EVENT, new Integer( idx ) ) );
cl.show( contentPane, key );
repaint();
}
public boolean handleEvent( Event evt )
{
int idx;
if( evt.id == Event.MOUSE_DOWN )
{
idx = nameList.indexOf( evt.target );
if( idx >= 0 ) {
showT( idx );
}
}
if( evt.id == Event.KEY_PRESS )
{
if( evt.key == '\t' )
{
if( ( evt.modifiers & evt.SHIFT_MASK ) != 0 )
{
selIdx--;
if( selIdx < 0 )
selIdx = nameList.size() - 1;
} else {
selIdx++;
if( selIdx >= nameList.size() )
selIdx = 0;
}
showT( selIdx );
}
}
return super.handleEvent( evt );
}
public void paint( Graphics g )
{
int i, n;
int lastX, x;
Dimension S;
S = size();
n = xList.size();
lastX = 1;
for( i = 0; i < n; i++ )
{
Integer I = (Integer) xList.elementAt( i );
x = I.intValue();
g.drawLine( x-4, 0, x, hTabs);
g.drawLine( lastX, 0, lastX, hTabs);
g.drawLine( lastX, 0, x-4, 0);
if( i == selIdx ) {
g.drawLine( 1, hTabs, lastX, hTabs );
g.drawLine( x, hTabs, S.width - 2, hTabs );
}
lastX = x;
}
g.drawLine( 1, hTabs, 1, S.height-2 );
g.drawLine( 1, S.height-1, S.width - 1, S.height - 1 );
g.drawLine( S.width - 1, S.height - 1, S.width - 1, hTabs );
}
/*
public static void main( String[] args )
{
TabPan tp = new TabPan();
Label lbl = new Label( "Optimization hinders evolution." );
tp.addT( "Text 1", lbl );
tp.addT( "Text 2", new Label( "TabPan" ) );
Panel p = new Panel();
p.setBackground( Color.blue );
tp.addT( "Panel", p );
KFrame k = new KFrame( "TabPanel Test" );
k.add( "Center", tp );
// k.resize( 300, 300 );
k.show();
k.pack();
}
*/
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -