Работя върху приложение с персонализирана форма и имам проблем с подсказките на моите бутони. Изолирах проблема в прост пример, който илюстрира точно моята ситуация.
Можете да видите, подсказката на средния бутон се показва добре, защото е по-голяма от основния панел, но тази на левия бутон не работи и е скрита от персонализираната ми форма.
Ето моят пример:
import java.awt.Point;
import java.awt.Polygon;
import java.awt.Shape;
import javax.swing.AbstractButton;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.ToolTipManager;
public class ButtonDemo extends JPanel {
protected JButton b1, b2, b3;
public ButtonDemo() {
b1 = new JButton("Disable middle button");
b1.setVerticalTextPosition(AbstractButton.CENTER);
b1.setHorizontalTextPosition(AbstractButton.LEADING);
b2 = new JButton("Middle button");
b2.setVerticalTextPosition(AbstractButton.BOTTOM);
b2.setHorizontalTextPosition(AbstractButton.CENTER);
b3 = new JButton("Enable middle button");
b3.setEnabled(false);
b1.setToolTipText("Click this button to disable the middle button.");
b2.setToolTipText("This middle button does nothing when you click it. This middle button does nothing when you click it. This middle button does nothing when you click it.");
b3.setToolTipText("Click this button to enable the middle button.");
add(b1);
add(b2);
add(b3);
}
private static void createAndShowGUI() {
JFrame frame = new JFrame("ButtonDemo");
frame.setUndecorated(true);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// Create and set up the content pane.
ButtonDemo newContentPane = new ButtonDemo();
newContentPane.setOpaque(true); // content panes must be opaque
frame.setContentPane(newContentPane);
// Display the window.
frame.pack();
frame.setSize(1024, 768);
frame.setVisible(true);
frame.setLocation(0, 0);
// Shape
final Point[] points = new Point[]{
//
new Point(0, 0),
//
new Point(0, frame.getHeight()),
//
new Point(frame.getWidth() - 400, frame.getHeight()),
//
new Point(frame.getWidth() - 400, 25),
//
new Point(frame.getWidth(), 25),
//
new Point(frame.getWidth(), 0),
//
new Point(0, 0)};
int[] xpoints = new int[points.length];
int[] ypoints = new int[points.length];
for (int i = 0; i < points.length; i++) {
xpoints[i] = (int) points[i].getX();
ypoints[i] = (int) points[i].getY();
}
Shape formeFenetre = new Polygon(xpoints, ypoints, points.length);
frame.setShape(formeFenetre);
}
public static void main(final String[] args) {
ToolTipManager.sharedInstance().setLightWeightPopupEnabled(false);
javax.swing.SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
createAndShowGUI();
}
});
}
}
Помислих си "ToolTipManager.sharedInstance().setLightWeightPopupEnabled(false);" беше точно това, което търсех, но не работи много добре с моя JRE. Между другото, използвам Java 1.7.0_09, но трябва да работи с всеки JRE в 1.7.
Дано някой знае какво да прави! Благодаря за четенето.
C:\Mine\JAVA\J2SE\classes>java -version java version "1.7.0_03"/Java(TM) SE Runtime Environment (build 1.7.0_03-b05)/Java HotSpot(TM) Client VM (build 22.1-b02, mixed mode, sharing)
- person nIcE cOw   schedule 17.06.2013