• category: swing folder: SpinnerArrowButtonSize title: JSpinnerのArrowButtonのサイズを変更 tags: [JSpinner, ArrowButton, LayoutManager, LookAndFeel] author: aterai pubdate: 2018-07-02T15:35:14+09:00 description: JSpinnerのArrowButtonの幅と高さを変更します。 image: https://drive.google.com/uc?id=1McNGUqRAnh6645Jnm2JMAuKtzxtsD-B56w

概要

JSpinnerArrowButtonの幅と高さを変更します。

サンプルコード

JSpinner spinner4 = new JSpinner(model) {
  @Override public void updateUI() {
    super.updateUI();
    setFont(getFont().deriveFont(32f));
    stream(this)
      .filter(JButton.class::isInstance)
      .map(JButton.class::cast)
      .forEach(b -> {
        Dimension d = b.getPreferredSize();
        d.width = 50;
        b.setPreferredSize(d);
      });
  }
};
View in GitHub: Java, Kotlin

解説

  • default
    • JSpinnerBasicArrowButtonは、幅は16px固定、高さはJSpinnerの高さの半分が推奨サイズになっている
  • Spinner.arrowButtonSize
    • UIManager.put("Spinner.arrowButtonSize", new Dimension(60, 0));などで幅を指定可能(高さの指定は無視される)
    • 幅固定のBasicArrowButtonを使用するMetalLookAndFeelMotifLookAndFeelなどでは無効
  • setPreferredSize
    • JSpinnerの子コンポーネントからJButtonを検索してJButton#setPreferredSize(...)で幅を変更
    • 幅固定のBasicArrowButtonを使用するMetalLookAndFeelMotifLookAndFeelなどでは無効
  • setLayout
    • LayoutManager#layoutContainer(...)メソッドをオーバーライドしてArrowButtonの幅を推奨サイズを無視して変更
    • LookAndFeelに関係なく幅を変更することが可能
  • setPreferredSizeでの幅変更と合わせて、JSpinnerのフォントサイズを変更してArrowButtonの高さも変更

参考リンク

コメント