Мне нужна была всплывающая подсказка со скроллом и возможность выделять текст для копипаста. Нашел пример со скроллом, но с выделением там беда какая-то, оно то работает, то нет. Отловить баг не получается. Гляньте, может кто что подскажет? Код | package example;
import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.border.BevelBorder;
import org.jdesktop.swingx.JXTextArea; public class JScrollableToolTip extends JToolTip implements MouseWheelListener { private JXTextArea tipArea; /** Creates a tool tip. */ public JScrollableToolTip(final int width, final int height) { setPreferredSize(new Dimension(width, height)); setLayout(new BorderLayout()); tipArea = new JXTextArea(); tipArea.setLineWrap(true); tipArea.setWrapStyleWord(true); tipArea.setEditable(true); //tipArea.setBorder(new BevelBorder(BevelBorder.LOWERED, null, null, null, null)); LookAndFeel.installColorsAndFont(tipArea, "ToolTip.background", "ToolTip.foreground", "ToolTip.font"); //LookAndFeel.installBorder(tipArea, "InternalFrame.border"); JScrollPane scrollpane = new JScrollPane(tipArea); scrollpane.setBorder(UIManager.getBorder("InternalFrame.border")); scrollpane.getViewport().setOpaque(false); add(scrollpane); } @Override public void addNotify() { super.addNotify(); JComponent comp = getComponent(); if (comp != null) { comp.addMouseWheelListener(this); } } @Override public void removeNotify() { JComponent comp = getComponent(); if(comp != null) { comp.removeMouseWheelListener(this); } super.removeNotify(); } public void mouseWheelMoved(final MouseWheelEvent e) { JComponent comp = getComponent(); if(comp != null) { tipArea.dispatchEvent(new MouseWheelEvent(tipArea, e.getID(), e.getWhen(), e.getModifiers(), 0, 0, e.getClickCount(), e.isPopupTrigger(), e.getScrollType(), e.getScrollAmount(), e.getWheelRotation())); } } @Override public void setTipText(/*final*/ String tipText) { String oldValue = this.tipArea.getText(); tipArea.setText(tipText); tipArea.setCaretPosition(0); firePropertyChange("tiptext", oldValue, tipText); } @Override public String getTipText() { return tipArea == null ? "" : tipArea.getText(); } @Override protected String paramString() { String tipTextString = (tipArea.getText() != null ? tipArea.getText() : ""); return super.paramString() + ",tipText=" + tipTextString; } //for testing only: public static void main(String args[]) { EventQueue.invokeLater(new Runnable() { public void run() { try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (Exception e) { e.printStackTrace(); } JFrame f = new JFrame("JScrollableToolTip"); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setSize(300, 200); f.setLocationRelativeTo(null); ToolTipManager.sharedInstance().setDismissDelay(Integer.MAX_VALUE); JTable table = new JTable(50, 4) { @Override public JToolTip createToolTip() { JScrollableToolTip tip = new JScrollableToolTip(200, 80); tip.setComponent(this); return tip; } }; table.setToolTipText("Used to display a 'Tip' for a Component. " + "Typically components provide api to automate the process of " + "using ToolTips. For example, any Swing component can use the " + "JComponent setToolTipText method to specify the text for a standard tooltip."); f.add(new JScrollPane(table)); f.setVisible(true); } }); } }
|
|