setRollover(true) を使用すると、Swing ツールバーのボタンは境界線なしでフラットになり、境界線はボタンをホバリングまたは押すときにのみ描画されます。ただし、ボタンが最初にパネルに追加され、次にパネルがツールバーに追加された場合、これは機能しません。それを達成する簡単な方法はありますか?
ボタンを JPanel に配置して、単一のコンポーネントとして機能させたいと考えています (最初/前/次/最後のページ ボタンを備えたページング コンポーネントを想像してください)。また、L&F に関係なく動作するようにしたい (JPanel がツールバーとボタンの間にない場合と同様)。
編集:
次の例で、ボタン 1 と 2 (直接追加) とボタン 3 と 4 (JPanel 経由で追加) を比較します。
import javax.swing.*;
public class ToolbarTest extends JFrame {
ToolbarTest() {
JToolBar toolbar = new JToolBar();
toolbar.setRollover(true);
JButton button = new JButton("One");
button.setFocusable(false);
toolbar.add(button);
button = new JButton("Two");
button.setFocusable(false);
toolbar.add(button);
JPanel panel = new JPanel();
button = new JButton("Three");
button.setFocusable(false);
panel.add(button);
button = new JButton("Four");
button.setFocusable(false);
panel.add(button);
toolbar.add(panel);
add(toolbar);
pack();
}
public static void main(String[] args) throws Throwable {
// optional: set look and feel (some lf might ignore the rollover property)
for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) { // or "Windows", "Motif"
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
}
ToolbarTest frame = new ToolbarTest();
frame.setVisible(true);
}
}
スクリーンショットは次のとおりです。
Nimbus LF のツールバー:
マウスを 2 番目のボタンの上に置いたときの同じツールバー (マウス カーソルは表示されません):
Windows LF の同じツールバー:
3 つボタンと 4 つボタンを 1 つボタンと 2 つボタンと同じように機能させたいと思います。