Swing/MnemonicToolTip の変更点
- 追加された行はこの色です。
- 削除された行はこの色です。
- Swing/MnemonicToolTip へ行く。
- Swing/MnemonicToolTip の差分を削除
--- category: swing folder: MnemonicToolTip title: JToolTipにJButtonのMnemonicを表示 tags: [JToolTip, JButton, Mnemonic] author: aterai pubdate: 2010-11-15T14:41:06+09:00 description: JButtonにMnemonicが設定されている場合、JToolTipにそれを表示します。 image: https://lh5.googleusercontent.com/_9Z4BYR88imo/TQTP7StneAI/AAAAAAAAAew/RwPtDfNOEyg/s800/MnemonicToolTip.png --- * 概要 [#summary] `JButton`に`Mnemonic`が設定されている場合、`JToolTip`にそれを表示します。 #download(https://lh5.googleusercontent.com/_9Z4BYR88imo/TQTP7StneAI/AAAAAAAAAew/RwPtDfNOEyg/s800/MnemonicToolTip.png) * サンプルコード [#sourcecode] #code(link){{ class MnemonicToolTip extends JToolTip { private final JLabel mnemonicLabel = new JLabel(); public MnemonicToolTip() { super(); setLayout(new BorderLayout()); mnemonicLabel.setForeground(Color.GRAY); mnemonicLabel.setBorder(BorderFactory.createEmptyBorder(0, 2, 0, 2)); add(mnemonicLabel, BorderLayout.EAST); } @Override public Dimension getPreferredSize() { Dimension d = super.getPreferredSize(); if (mnemonicLabel.isVisible()) { d.width += mnemonicLabel.getPreferredSize().width; } return d; } @Override public void setComponent(JComponent c) { if (c instanceof AbstractButton) { AbstractButton b = (AbstractButton) c; int mnemonic = b.getMnemonic(); if (mnemonic > 0) { mnemonicLabel.setVisible(true); mnemonicLabel.setText("Alt + " + KeyEvent.getKeyText(mnemonic)); } else { mnemonicLabel.setVisible(false); } } super.setComponent(c); } } }} * 解説 [#explanation] - 上 -- `JButton`に`PropertyChangeListener`を設定し、`Mnemonic`が変更されたら`JButton#setToolTipText(...)`メソッドで直接`Mnemonic`を変更 -- `JButton`に`PropertyChangeListener`を設定して`Mnemonic`が変更されたら`JButton#setToolTipText(...)`メソッドで直接`Mnemonic`を変更 - 下 -- `JToolTip`に`BorderLayout`を設定して、`Mnemonic`用の`JLabel`を表示する`JToolTip`を作成して`JButton`に設定 -- `JToolTip`に`BorderLayout`を設定して`Mnemonic`用の`JLabel`を表示する`JToolTip`を作成して`JButton`に設定 * 参考リンク [#reference] - [[JToolTipにアイコンを表示>Swing/ToolTipIcon]] * コメント [#comment] #comment #comment