boite bien pratique pour ranger des bouton ou des textfield d option. Un double click sur la barre et elle senroule ou se deroule.
pour l utiliser dans un programme il suffi d utiliser ma methode
getComponentPane() au lieu de getContentPane() pour le reste elle s utilise comme une JDialogue.
le Main montre un exemple
Source / Exemple :
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.net.*;
import javax.swing.*;
/**
- boite de dialogue deroulente
- la boite se deroule en double clickan sur la bar de titre
- et ce ferme en clikan sur le bouton de droite
- @author ludo
- /
public class DlgMiniBar extends JDialog
{
private JPanel pnlPrincipal = new JPanel();
private JPanel pnl = new JPanel();
private int borderSize = 1;
private final int TITLEBAR_HEIGHT = 12;
private boolean raised = true;
public static final boolean BORDER_RAISED = true;
public static final boolean BORDER_NOT_RAISED = false;
public DlgMiniBar(Frame frame) throws HeadlessException
{
super( frame );
try
{
setUndecorated( true );
getContentPane().setLayout( null );
getContentPane().add( pnl );//, BorderLayout.CENTER );
pnl.setLayout( new BorderLayout() );
pnl.add( t, BorderLayout.NORTH );
pnl.add( pnlPrincipal, BorderLayout.CENTER );
Color b = (frame==null)?SystemColor.window:frame.getBackground();
Color f = (frame==null)?SystemColor.windowText:frame.getForeground();
pnlPrincipal.setBackground( b );
pnlPrincipal.setForeground( f );
t.setPreferredSize( new Dimension( 60, TITLEBAR_HEIGHT ) );
pnl.setLocation( borderSize, borderSize );
pnl.setSize( 60, 60 );//d );
setBtnIcon( "close.gif", "closedis.gif" );
}
catch (Exception e)
{
System.out.println("DlgMiniBar : "+e);
}
}
public JPanel getComponentPane()
{
return pnlPrincipal;
}
boolean titleResize = false;
public void setSize(int x, int y )
{
super.setSize( x, y );
if ( !titleResize )
{
pnl.setSize( x-2*borderSize, y-2*borderSize );
pnl.setLocation( borderSize, borderSize );
}
}
public void paint( Graphics g )
{
super.paint( g );
paintBorder( g );
}
private void paintBorder( Graphics g )
{
if ( borderSize == 0 ) return; // si pas de border ben on en fai pas ;o)
Dimension d = getSize();
g.setColor( SystemColor.controlHighlight ) ;//windowBorder );
for (int i = 0; i < borderSize; i++)
{
// g.draw3DRect( 0+i, 0+i, d.width-1, d.height-1, raised );
g.draw3DRect( 0+i, 0+i, d.width-1, d.height-1, raised );
d.width -= 2;
d.height -= 2;
}
d = getSize();
g.setColor( SystemColor.window );
g.drawLine( 0, 0, d.width-1, 0 );
g.drawLine( 0, 0, 0, d.height-1 );
g.setColor( Color.black );
g.drawLine( 0, d.height-1, d.width-1, d.height-1 );
g.drawLine( d.width-1, 0, d.width-1, d.height-1 );
}
public void setSize(Dimension dim)
{
super.setSize(dim);
if ( !titleResize )
{
pnl.setSize( dim.width-2*borderSize, dim.height-2*borderSize );
pnl.setLocation( borderSize, borderSize );
}
}
public void setTitle( String titre )
{
t.setText( titre );
}
TitleBar t = new TitleBar( "Titre de la bar");
public DlgMiniBar() throws HeadlessException
{
this( (Frame)null );
}
class TitleBar extends JPanel
{
JLabel lbl = new JLabel();
JButton btn = new JButton();
TitleBar( String titre )
{
try
{
setBackground( SystemColor.activeCaption ); //new Color( SystemColor.ACTIVE_CAPTION_BORDER ) );
setForeground( SystemColor.activeCaptionText );
setLayout( new BorderLayout( 0, 0 ) );
btn.setFocusPainted( false );
btn.setPreferredSize( new Dimension( TITLEBAR_HEIGHT, TITLEBAR_HEIGHT ) );
lbl.setText( titre );
lbl.setForeground( SystemColor.activeCaptionText );
lbl.setBackground( SystemColor.activeCaption );
lbl.setFont( new Font("Dialog", Font.PLAIN, TITLEBAR_HEIGHT - 2 ) );
add( lbl, BorderLayout.CENTER );
add( btn, BorderLayout.EAST );
JLabel lbl2 = new JLabel();
lbl2.setPreferredSize( new Dimension( 2, TITLEBAR_HEIGHT - 2 ) );
add( lbl2, BorderLayout.WEST );
btn.setEnabled( false );
IcareMouseMotion imm = new IcareMouseMotion();
lbl.addMouseMotionListener( imm );
IcareMouse icareMouse = new IcareMouse();
lbl.addMouseListener( icareMouse );
this.addMouseListener( icareMouse );
this.addMouseMotionListener( imm );
}
catch (Exception e)
{
System.out.println("TitleBar de JminiDialog : "+e);
}
}
public void setText( String s )
{
lbl.setText( s );
repaint();
}
}
public void setBtnActionListener( ActionListener al )
{
if ( al != null )
{
t.btn.setEnabled( true );
t.btn.addActionListener( al );
}
}
public void setBtnIcon( String fichierIcon, String fichierIconDisable )
{
// try
// {
// je met tou sa en comment car ImageIcon est ds un package et
// pas trop le courage dans faire une class locale simplifier
// if ( fichierIcon != null )
// {
// ImageIcon closeDial = new ImageIcon();
// closeDial.setImageLocation( getURL("images/"+fichierIcon));
// t.btn.setIcon( closeDial );
// }
// if ( fichierIconDisable != null )
// {
// ImageIcon closeDisDial = new ImageIcon();
// closeDisDial.setImageLocation(getURL("images/"+fichierIconDisable));
// t.btn.setDisabledIcon( closeDisDial );
// }
// }
// catch (java.net.MalformedURLException error) { }
}
Point saveLoc = null;
class IcareMouseMotion extends java.awt.event.MouseMotionAdapter
{
public void mouseMoved(java.awt.event.MouseEvent event)
{
Object object = event.getSource();
}
public void mouseDragged(java.awt.event.MouseEvent event)
{
Object object = event.getSource();
deplaceFentre( event );
}
}
public void deplaceFentre( java.awt.event.MouseEvent event )
{
int x = event.getX();
int y = event.getY();
Point p = getLocationOnScreen();
p.translate( x, y );
p.translate( -saveLoc.x, -saveLoc.y );
setLocation( p );
}
public void saveLocation( java.awt.event.MouseEvent event )
{
saveLoc = new Point( event.getX(), event.getY() );
}
class IcareMouse extends java.awt.event.MouseAdapter
{
public void mousePressed(java.awt.event.MouseEvent event)
{
Object object = event.getSource();
saveLocation( event );
}
public void mouseClicked(java.awt.event.MouseEvent event)
{
Object object = event.getSource();
if ( object == t.lbl && event.getClickCount() == 2 )
retresiTou();
}
}
private boolean retresi = false;
Dimension saveSize = null;
public void retresiTou()
{
Dimension d = getSize();
retresi = d.height != TITLEBAR_HEIGHT+borderSize*2;
if ( retresi )
{
saveSize = new Dimension( d );
d = this.getSize();//new Dimension( t.getSize() );
d.height = TITLEBAR_HEIGHT+borderSize*2;
setSizeByTitle( d );
}
else
{
setSizeByTitle( saveSize );
}
repaint();
}
public void hideDlg()
{
setVisible( false );
}
private void setSizeByTitle( Dimension d )
{
titleResize = true;
setSize( d );
titleResize = false;
}
public void pack()
{
// super.pack();
}
public int getBorderSize()
{
return borderSize;
}
public void setBorderSize(int borderSize)
{
this.borderSize = borderSize;
setSize( getSize() );
}
public boolean isRaised()
{
return raised;
}
public void setRaised(boolean raised)
{
this.raised = raised;
}
public void setBounds(int x, int y, int width, int height)
{
super.setBounds(x, y, width, height);
if ( pnl != null )
{
pnl.setSize( width-2*borderSize, height-2*borderSize );
pnl.setLocation( borderSize, borderSize );
}
}
public void setBounds(Rectangle r)
{
super.setBounds(r);
if ( pnl != null )
{
pnl.setSize( r.width-2*borderSize, r.height-2*borderSize );
pnl.setLocation( borderSize, borderSize );
}
}
public boolean isRetresi()
{
return retresi;
}
public void setVisible(boolean b)
{
super.setVisible(b);
if (b) repaint();
}
public URL getURL( String file )
throws MalformedURLException
{
URL documentBase = new URL("file:///" + System.getProperty("user.dir") + "/");
return new URL( documentBase, file );
}
public static void main(String[] args)
{
DlgMiniBar dlg = new DlgMiniBar();//.setVisible( true );
dlg.setRaised( DlgMiniBar.BORDER_RAISED );
dlg.setBounds( 300, 300, 200, 100 );
dlg.setBorderSize( 3 );
dlg.setBtnActionListener( new ActionListener() {
public void actionPerformed(ActionEvent e) { System.exit( 0 ); } });
dlg.setTitle( "Ceci est le titre de cette boite");
dlg.setVisible( true );
}
}
Conclusion :
moi je l utilise comme sa mais on peu encor l ameliorer.
notement on pourrer declencher l ouverture de la boite juste en efleurran la barre et sa fermeture en sortant de la boite (c pas tre dur a faire toute les methodes necessaire son deja implementer)
bonne prog
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.