概要

JOptionPaneから作成、使用可能なメッセージダイアログのOKボタンテキストを変更します。

サンプルコード

UIManager.put("OptionPane.okButtonText", "back");

JLabel label2 = new JLabel("JButton#setFocusPainted(false)");
label2.addHierarchyListener(e -> {
  Component c = e.getComponent();
  if ((e.getChangeFlags() & HierarchyEvent.SHOWING_CHANGED) != 0 &&
        c.isShowing()) {
    descendants(((JComponent) c).getRootPane())
        .filter(JButton.class::isInstance)
        .map(JButton.class::cast)
        .findFirst()
        .ifPresent(b -> {
          b.setFocusPainted(false);
          b.setText("back2");
        });
  }
});
JButton button2 = new JButton("HierarchyListener + setFocusPainted(false)");
button2.addActionListener(e -> {
  Component p = ((JComponent) e.getSource()).getRootPane();
  JOptionPane.showMessageDialog(
      p, label2, "title2", JOptionPane.PLAIN_MESSAGE);
});

// https://docs.oracle.com/javase/tutorial/uiswing/components/dialog.html#button
JButton button3 = new JButton("showOptionDialog");
button3.addActionListener(e -> {
  Object[] options = {"Yes, please"}; // {"Yes, please", "No way!"};
  JOptionPane.showOptionDialog(
      ((JComponent) e.getSource()).getRootPane(),
      "Would you like green eggs and ham?",
      "A Silly Question",
      JOptionPane.OK_OPTION,
      JOptionPane.PLAIN_MESSAGE,
      null,
      options,
      options[0]);
});
View in GitHub: Java, Kotlin

解説

  • Default
    • UIManager.put("OptionPane.okButtonText", "...")ですべてのOKボタンのテキストを変更
  • showMessageDialog + HierarchyListener
    • JOptionPane.showMessageDialog(...)で開くOKボタンのみのメッセージダイアログの表示状態が変化するイベントをHierarchyListenerで取得し、メッセージダイアログに配置されているJButtonを検索・取得してそのタイトルを変更
    • JOptionPaneの背景色を変更する
  • showOptionDialog
    • JOptionPane.showMessageDialog(...)で開くオプションダイアログの選択可能な項目をひとつだけ設定してメッセージダイアログ風に変更し、そのひとつのボタンテキストを変更

参考リンク

コメント