Re: flat JButtons
To: comp.lang.java.gui
On 31-5-2008 16:36, RVince wrote:
Does anyone know how to make a flat JButton, or a JButton whose perimiter
only shows when rolled over? Thanks.
You mean like buttons on a JToolBar?
You could use setContentAreaFilled(true) when the mouse is over the
button and setContentAreaFilled(false) when not. A MouseListener can be
used to detect when the mouse is over the button or not.
This is demonstrated in the following SCCCE:
package test;
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.AbstractButton;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
public class FlatRolloverButtons extends JFrame {
private static final long serialVersionUID = 1L;
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
FlatRolloverButtons thisClass = new FlatRolloverButtons();
thisClass.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
thisClass.setVisible(true);
}
});
}
private JButton jButton1 = null;
private JButton jButton2 = null;
private JButton jButton3 = null;
private JButton jButtonExit = null;
private JPanel jContentPane = null;
private JPanel jPanelMain = null;
private MouseListener rolloverButtonListener;
public FlatRolloverButtons() {
super();
initialize();
}
private JButton getJButton1() {
if (jButton1 == null) {
jButton1 = new JButton();
jButton1.setText("Button 1");
initializeAsFlatRolloverButton(jButton1);
}
return jButton1;
}
private JButton getJButton2() {
if (jButton2 == null) {
jButton2 = new JButton();
jButton2.setText("Button 2");
initializeAsFlatRolloverButton(jButton2);
}
return jButton2;
}
private JButton getJButton3() {
if (jButton3 == null) {
jButton3 = new JButton();
jButton3.setText("Button 3");
initializeAsFlatRolloverButton(jButton3);
}
return jButton3;
}
private JButton getJButtonExit() {
if (jButtonExit == null) {
jButtonExit = new JButton();
jButtonExit.setText("Exit");
jButtonExit.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
}
return jButtonExit;
}
private JPanel getJContentPane() {
if (jContentPane == null) {
jContentPane = new JPanel();
jContentPane.setLayout(new BorderLayout());
jContentPane.add(getJButtonExit(), BorderLayout.SOUTH);
jContentPane.add(getJPanelMain(), BorderLayout.CENTER);
}
return jContentPane;
}
private JPanel getJPanelMain() {
if (jPanelMain == null) {
jPanelMain = new JPanel();
jPanelMain.setLayout(new FlowLayout());
jPanelMain.add(getJButton1(), null);
jPanelMain.add(getJButton2(), null);
jPanelMain.add(getJButton3(), null);
}
return jPanelMain;
}
private MouseListener getRolloverButtonListener() {
if (rolloverButtonListener == null) {
rolloverButtonListener = new MouseAdapter() {
public void mouseEntered(MouseEvent e) {
Object source = e.getSource();
if (source instanceof AbstractButton) {
AbstractButton button = (AbstractButton) source;
button.setContentAreaFilled(true);
}
}
public void mouseExited(MouseEvent e) {
Object source = e.getSource();
if (source instanceof AbstractButton) {
AbstractButton button = (AbstractButton) source;
button.setContentAreaFilled(false);
}
}
};
}
return rolloverButtonListener;
}
private void initialize() {
this.setSize(300, 200);
this.setContentPane(getJContentPane());
this.setTitle("JFrame");
}
private void initializeAsFlatRolloverButton(AbstractButton b) {
b.addMouseListener(getRolloverButtonListener());
b.setContentAreaFilled(false);
}
}
// END OF FlatRolloverButtons
--
Regards,
Roland
---
* Synchronet * The Whitehouse BBS --- whitehouse.hulds.com --- check it out free usenet!
--- Synchronet 3.15a-Win32 NewsLink 1.92
Time Warp of the Future BBS - telnet://time.synchro.net:24