Java/Swing JFC/Tooltip
Версия от 18:01, 31 мая 2010; (обсуждение)
Содержание
- 1 By default, the lines are left justified. Center the lines.
- 2 Changing ToolTip background color for Swing Applications
- 3 Colored ToolTip Example
- 4 Disable / enable application tool tips
- 5 Enabling and Disabling Tool Tips
- 6 Html tooltips
- 7 Italicize the second line
- 8 Make a tool tips appear immediately
- 9 Making Tool Tips Appear Immediately
- 10 Making Tool Tips Remain Visible
- 11 Modify the behaviour of the default JToolTip
- 12 MultiLine ToolTip Example
- 13 Set a tool tip for swing component
- 14 Set the location of the tool tip such that its nw corner coincides with the bottom center of the button
- 15 Setting a Tool Tip
- 16 Setting the Location of a Tool Tip
- 17 Showing an Image in a ToolTip
- 18 Showing an Image in a Tool Tip with HTML
- 19 ToolTip Location Example
- 20 Tooltip Sample
- 21 Use the default tool tip location
- 22 Working with Tooltip Text
By default, the lines are left justified. Center the lines.
import javax.swing.JButton;
public class Main {
public static void main(String[] argv) throws Exception {
JButton component = new JButton();
component.setToolTipText("<html><center>" + "This is a" + "<br>" + "tool tip"
+ "</center></html>");
}
}
Changing ToolTip background color for Swing Applications
import java.awt.Dimension;
import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.UIDefaults;
import javax.swing.UIManager;
import javax.swing.plaf.ColorUIResource;
import javax.swing.plaf.metal.MetalLookAndFeel;
class MyLookAndFeel extends MetalLookAndFeel {
protected void initSystemColorDefaults(UIDefaults table) {
super.initSystemColorDefaults(table);
table.put("info", new ColorUIResource(255, 255, 225));
}
}
class Main extends JFrame {
public Main() throws Exception{
UIManager.setLookAndFeel("MyLookAndFeel");
setLayout(new FlowLayout());
JButton b = new JButton();
b.setText("<html>A<br> B</html>");
b.setToolTipText("<html>C<br>D<br>E</html>");
add(b);
JLabel l = new JLabel("Z");
l.setToolTipText("zzzzz...");
add(l);
}
public static void main(String[] arg)throws Exception {
Main m = new Main();
m.setVisible(true);
m.setSize(new Dimension(300, 150));
m.validate();
}
}
Colored ToolTip Example
// Example from http://www.crionics.ru/products/opensource/faq/swing_ex/SwingExamples.html
/* (swing1.1) */
import java.awt.Color;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.UIManager;
import javax.swing.plaf.ColorUIResource;
/**
* @version 1.0 12/10/98
*/
public class ColoredToolTipExample extends JFrame {
public ColoredToolTipExample() {
super("Colored ToolTip Example");
UIManager.put("ToolTip.foreground", new ColorUIResource(Color.red));
UIManager.put("ToolTip.background", new ColorUIResource(Color.yellow));
JButton button = new JButton("Hello, world");
button.setToolTipText("Red / Yellow");
getContentPane().add(button);
}
public static void main(String args[]) {
try {
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
} catch (Exception evt) {}
ColoredToolTipExample f = new ColoredToolTipExample();
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
f.setSize(300, 100);
f.show();
}
}
Disable / enable application tool tips
import java.awt.FlowLayout;
import java.awt.HeadlessException;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.ToolTipManager;
public class Main extends JFrame {
public Main() throws HeadlessException {
setSize(300, 300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
getContentPane().setLayout(new FlowLayout(FlowLayout.CENTER));
JButton disable = new JButton("DISABLE");
disable.setToolTipText("disabled.");
disable.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
ToolTipManager.sharedInstance().setEnabled(false);
}
});
JButton enable = new JButton("ENABLE");
enable.setToolTipText("enabled.");
enable.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
ToolTipManager.sharedInstance().setEnabled(true);
}
});
getContentPane().add(enable);
getContentPane().add(disable);
}
public static void main(String[] args) {
new Main().setVisible(true);
}
}
Enabling and Disabling Tool Tips
import javax.swing.ToolTipManager;
public class Main {
public static void main(String[] argv) throws Exception {
// Enable tool tips for the entire application
ToolTipManager.sharedInstance().setEnabled(true);
// Disable tool tips for the entire application
ToolTipManager.sharedInstance().setEnabled(false);
}
}
Html tooltips
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class HtmlToolTipDemo extends JPanel {
public static void main(String[] a) {
JFrame mainFrame = new JFrame();
JLabel label = new JLabel("label");
label.setToolTipText("<html>First line<br>Second Line</html>");
mainFrame.getContentPane().add(label);
mainFrame.setSize(100, 100);
mainFrame.setVisible(true);
}
}
Italicize the second line
import javax.swing.JButton;
public class Main {
public static void main(String[] argv) throws Exception {
JButton component = new JButton();
component.setToolTipText("<html>" + "This is a" + "<br><i>" + "tool tip" + "</i></html>");
}
}
Make a tool tips appear immediately
import javax.swing.ToolTipManager;
public class Main {
public static void main(String[] argv) throws Exception {
// Get current delay
int initialDelay = ToolTipManager.sharedInstance().getInitialDelay();
// Show tool tips immediately
ToolTipManager.sharedInstance().setInitialDelay(0);
// Show tool tips after a second
initialDelay = 1000;
ToolTipManager.sharedInstance().setInitialDelay(initialDelay);
}
}
Making Tool Tips Appear Immediately
import javax.swing.ToolTipManager;
public class Main {
public static void main(String[] argv) throws Exception {
// Get current delay
int initialDelay = ToolTipManager.sharedInstance().getInitialDelay();
// Show tool tips immediately
ToolTipManager.sharedInstance().setInitialDelay(0);
// Show tool tips after a second
initialDelay = 1000;
ToolTipManager.sharedInstance().setInitialDelay(initialDelay);
}
}
Making Tool Tips Remain Visible
import javax.swing.ToolTipManager;
public class Main {
public static void main(String[] argv) throws Exception {
// Get current delay
int dismissDelay = ToolTipManager.sharedInstance().getDismissDelay();
// Keep the tool tip showing
dismissDelay = Integer.MAX_VALUE;
ToolTipManager.sharedInstance().setDismissDelay(dismissDelay);
}
}
Modify the behaviour of the default JToolTip
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Point;
import java.awt.event.MouseEvent;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JToolTip;
public class Main {
public static void main(String args[]) {
JFrame frame = new JFrame("JToolTip Sample");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JButton b1 = new JButton("Button 1") {
public JToolTip createToolTip() {
JToolTip tip = super.createToolTip();
tip.setForeground(Color.YELLOW);
return tip;
}
public Point getToolTipLocation(MouseEvent event) {
return new Point((event.getX() + 100), (event.getY() + 100));
}
};
b1.setToolTipText("HELLO");
frame.add(b1, BorderLayout.NORTH);
frame.setSize(300, 150);
frame.setVisible(true);
}
}
MultiLine ToolTip Example
// Example from http://www.crionics.ru/products/opensource/faq/swing_ex/SwingExamples.html
/* (swing1.1beta3) */
import java.awt.Dimension;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.Toolkit;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.StringReader;
import java.util.Enumeration;
import java.util.Vector;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JToolTip;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.plaf.metal.MetalToolTipUI;
/**
* @version 1.0 11/09/98
*/
public class MultiLineToolTipExample extends JFrame {
public MultiLineToolTipExample() {
super("Multi-Line ToolTip Example");
JButton button = new JButton("Hello, world") {
public JToolTip createToolTip() {
MultiLineToolTip tip = new MultiLineToolTip();
tip.setComponent(this);
return tip;
}
};
button.setToolTipText("Hello\nworld");
getContentPane().add(button);
}
public static void main(String args[]) {
try {
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
} catch (Exception evt) {}
MultiLineToolTipExample f = new MultiLineToolTipExample();
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
f.setSize(300, 100);
f.show();
}
}
class MultiLineToolTip extends JToolTip {
public MultiLineToolTip() {
setUI(new MultiLineToolTipUI());
}
}
class MultiLineToolTipUI extends MetalToolTipUI {
private String[] strs;
private int maxWidth = 0;
public void paint(Graphics g, JComponent c) {
FontMetrics metrics = Toolkit.getDefaultToolkit().getFontMetrics(
g.getFont());
Dimension size = c.getSize();
g.setColor(c.getBackground());
g.fillRect(0, 0, size.width, size.height);
g.setColor(c.getForeground());
if (strs != null) {
for (int i = 0; i < strs.length; i++) {
g.drawString(strs[i], 3, (metrics.getHeight()) * (i + 1));
}
}
}
public Dimension getPreferredSize(JComponent c) {
FontMetrics metrics = Toolkit.getDefaultToolkit().getFontMetrics(
c.getFont());
String tipText = ((JToolTip) c).getTipText();
if (tipText == null) {
tipText = "";
}
BufferedReader br = new BufferedReader(new StringReader(tipText));
String line;
int maxWidth = 0;
Vector v = new Vector();
try {
while ((line = br.readLine()) != null) {
int width = SwingUtilities.ruputeStringWidth(metrics, line);
maxWidth = (maxWidth < width) ? width : maxWidth;
v.addElement(line);
}
} catch (IOException ex) {
ex.printStackTrace();
}
int lines = v.size();
if (lines < 1) {
strs = null;
lines = 1;
} else {
strs = new String[lines];
int i = 0;
for (Enumeration e = v.elements(); e.hasMoreElements(); i++) {
strs[i] = (String) e.nextElement();
}
}
int height = metrics.getHeight() * lines;
this.maxWidth = maxWidth;
return new Dimension(maxWidth + 6, height + 4);
}
}
Set a tool tip for swing component
import java.awt.FlowLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class Main {
public static void main(String[] args) {
JFrame frame = new JFrame("Tool Tip Demo");
frame.setSize(200, 200);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JLabel label = new JLabel("Hover on me!");
label.setToolTipText("My JLabel Tool Tip");
frame.getContentPane().setLayout(new FlowLayout(FlowLayout.CENTER));
frame.getContentPane().add(label);
frame.setVisible(true);
}
}
Set the location of the tool tip such that its nw corner coincides with the bottom center of the button
import java.awt.Point;
import java.awt.event.MouseEvent;
import javax.swing.JButton;
public class Main {
public static void main(String[] argv) throws Exception {
JButton button = new JButton("My Button") {
public Point getToolTipLocation(MouseEvent event) {
return new Point(getWidth() / 2, getHeight());
}
};
}
}
Setting a Tool Tip
import javax.swing.JButton;
import javax.swing.JComponent;
public class Main {
public static void main(String[] argv) throws Exception {
JComponent button = new JButton("Label");
// Set tool tip text
button.setToolTipText("tool tip text");
}
}
Setting the Location of a Tool Tip
import java.awt.Point;
import java.awt.event.MouseEvent;
import javax.swing.JButton;
public class Main {
public static void main(String[] argv) throws Exception {
JButton button = new JButton("My Button") {
public Point getToolTipLocation(MouseEvent event) {
return new Point(0, 0);
}
};
}
}
Showing an Image in a ToolTip
import java.awt.Dimension;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.Image;
import javax.swing.ImageIcon;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JToolTip;
import javax.swing.SwingUtilities;
import javax.swing.plaf.metal.MetalToolTipUI;
public class Main {
public static void main(String[] argv) {
JLabel wonLabel = new JLabel() {
public JToolTip createToolTip() {
return new ImageToolTip();
}
};
wonLabel.setToolTipText("asdf");
}
}
class ImageToolTip extends JToolTip {
public ImageToolTip() {
setUI(new ImageToolTipUI());
}
}
class ImageToolTipUI extends MetalToolTipUI {
public void paint(Graphics g, JComponent c) {
FontMetrics metrics = c.getFontMetrics(g.getFont());
g.setColor(c.getForeground());
g.drawString(((JToolTip) c).getTipText(), 1, 1);
g.drawImage(new ImageIcon("yourImage").getImage(), 1, metrics.getHeight(), c);
}
public Dimension getPreferredSize(JComponent c) {
FontMetrics metrics = c.getFontMetrics(c.getFont());
String tipText = ((JToolTip) c).getTipText();
if (tipText == null) {
tipText = "";
}
Image image = new ImageIcon("yourImage").getImage();
int width = SwingUtilities.ruputeStringWidth(metrics, tipText);
int height = metrics.getHeight() + image.getHeight(c);
if (width < image.getWidth(c)) {
width = image.getWidth(c);
}
return new Dimension(width, height);
}
}
Showing an Image in a Tool Tip with HTML
import javax.swing.JButton;
public class Main {
public static void main(String[] argv) throws Exception {
JButton component = new JButton();
String imageName = "file:image.jpg";
component.setToolTipText("<html>Here is an image <img src=" + imageName + "></html>");
}
}
ToolTip Location Example
// Example from http://www.crionics.ru/products/opensource/faq/swing_ex/SwingExamples.html
/* (swing1.1.1) */
import java.awt.Container;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.UIManager;
/**
* @version 1.0 08/27/98
*/
public class ToolTipLocationExample extends JFrame {
public ToolTipLocationExample() {
super("ToolTip Location Example");
// above position
JButton buttonAbove = new JButton("Above") {
public Point getToolTipLocation(MouseEvent e) {
return new Point(20, -30);
}
};
buttonAbove.setToolTipText("Hello world");
// blow (default) position
JButton buttonBelow = new JButton("Below");
buttonBelow.setToolTipText("Hello world");
// whatever
final RelocatableToolTipButton buttonRelocate = new RelocatableToolTipButton(
"Relocate");
buttonRelocate.setToolTipText("Hello world");
buttonRelocate.addActionListener(new ActionListener() {
JPanel messagePanel = createPanel();
JTextField locationX, locationY;
public void actionPerformed(ActionEvent e) {
Point p = buttonRelocate.getToolTipLocation(null);
if (p == null) {
locationX.setText("default");
locationY.setText("default");
} else {
locationX.setText(Integer.toString(p.x));
locationY.setText(Integer.toString(p.y));
}
int result = JOptionPane.showOptionDialog(
ToolTipLocationExample.this, messagePanel, "Location",
JOptionPane.OK_CANCEL_OPTION,
JOptionPane.QUESTION_MESSAGE, null, null, null);
if (result == JOptionPane.OK_OPTION) {
try {
int x = Integer.parseInt(locationX.getText());
int y = Integer.parseInt(locationY.getText());
buttonRelocate.setToolTipLocation(new Point(x, y));
} catch (NumberFormatException ex) {
ex.printStackTrace();
}
}
}
private JPanel createPanel() {
JPanel p = new JPanel();
p.setLayout(new BoxLayout(p, BoxLayout.X_AXIS));
p.add(new JLabel(" X: "));
p.add(locationX = new JTextField());
p.add(new JLabel(" Y: "));
p.add(locationY = new JTextField());
return p;
}
});
JPanel panel = new JPanel();
panel.add(buttonAbove);
panel.add(buttonBelow);
panel.add(buttonRelocate);
Container c = getContentPane();
c.setLayout(new BoxLayout(c, BoxLayout.Y_AXIS));
c.add(Box.createVerticalStrut(30));
c.add(panel);
}
class RelocatableToolTipButton extends JButton {
Point toolTipLocation;
RelocatableToolTipButton(String label) {
super(label);
toolTipLocation = null;
}
public Point getToolTipLocation(MouseEvent e) {
return toolTipLocation;
}
public void setToolTipLocation(Point location) {
toolTipLocation = location;
}
}
public static void main(String args[]) {
try {
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
} catch (Exception evt) {}
ToolTipLocationExample frame = new ToolTipLocationExample();
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
frame.setSize(300, 130);
frame.setVisible(true);
}
}
Tooltip Sample
import java.awt.BorderLayout;
import java.awt.Container;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JToolTip;
public class TooltipSample {
public static void main(String args[]) {
String title = "Tooltip Sample";
JFrame frame = new JFrame(title);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container container = frame.getContentPane();
JPanel panel = new JPanel();
panel.setToolTipText("<HtMl>Tooltip<br>Message");
container.add(panel, BorderLayout.CENTER);
JButton button = new JButton("Hello World") {
public JToolTip createToolTip() {
JToolTip tip = super.createToolTip();
tip.setBackground(Color.yellow);
tip.setForeground(Color.green);
return tip;
}
public boolean contains(int x, int y) {
if (x < 100) {
setToolTipText("Got Green Eggs?");
} else {
setToolTipText("Got Ham?");
}
return super.contains(x, y);
}
};
button.setToolTipText("Hello World");
frame.getContentPane().add(button, BorderLayout.NORTH);
frame.setSize(300, 150);
frame.setVisible(true);
}
}
Use the default tool tip location
import java.awt.Point;
import java.awt.event.MouseEvent;
import javax.swing.JButton;
public class Main {
public static void main(String[] argv) throws Exception {
JButton button = new JButton("My Button") {
public Point getToolTipLocation(MouseEvent event) {
return null;
}
};
// Set the tool tip text
button.setToolTipText("aString");
}
}
Working with Tooltip Text
import java.awt.BorderLayout;
import java.awt.Container;
import javax.swing.JButton;
import javax.swing.JFrame;
public class ButtonTipTest {
public static void main(String args[]) {
JFrame frame = new JFrame("Tool Tips");
Container contentPane = frame.getContentPane();
JButton b = new JButton("Button");
b.setToolTipText("Go Away");
contentPane.add(b, BorderLayout.NORTH);
frame.setSize(300, 200);
frame.show();
}
}