package magic.ui.screen.images.download; import java.awt.AlphaComposite; import java.awt.Composite; import java.awt.Font; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import javax.swing.JComponent; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.SwingConstants; import magic.ui.MagicImages; import magic.ui.widget.M.MWidget; import net.miginfocom.swing.MigLayout; @SuppressWarnings("serial") public class HintPanel extends JPanel { private final JLabel lbl = new JLabel(); private final MouseAdapter tooltipMouseAdapter; public HintPanel(String aHint) { setOpaque(false); lbl.setVerticalAlignment(SwingConstants.TOP); lbl.setFont(new Font("SansSerif", Font.ITALIC, 12)); lbl.setVerticalTextPosition(SwingConstants.TOP); tooltipMouseAdapter = new MouseAdapter() { @Override public void mouseEntered(MouseEvent e) { showTooltipHint(e.getSource()); } @Override public void mouseExited(MouseEvent e) { clearHint(); } }; setLayout(new MigLayout()); add(lbl, "w 100%, h 100%"); setToolTipText(aHint); showTooltipHint(this); } public HintPanel() { this(null); } /** * * @param aComponent * @param text : tooltip text (can use html). */ public void addHintSource(JComponent aComponent, String text) { aComponent.setToolTipText(text); aComponent.addMouseListener(tooltipMouseAdapter); } public void addHintSource(MWidget aWidget) { aWidget.addMouseListener(tooltipMouseAdapter); } private void clearHint() { showTooltipHint(this); } private void showTooltipHint(Object source) { if (source instanceof JComponent) { final JComponent c = (JComponent) source; lbl.setText(String.format("<html>%s</html>", c.getToolTipText() == null ? getToolTipText() : c.getToolTipText())); } } @Override protected void paintComponent(Graphics g) { super.paintComponent(g); final Composite composite = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.04f); final Graphics2D g2d = (Graphics2D) g.create(); g2d.setComposite(composite); g2d.drawImage( MagicImages.LOGO, (getWidth() - MagicImages.LOGO.getWidth()) / 2, (getHeight() - MagicImages.LOGO.getHeight()) / 2, this ); g2d.dispose(); } }