の特殊なサブクラスJDialog
(と呼ばれるBrushListDialog
)があり、その中に。がありJList
ます。リストは、カスタムリストモデル(拡張DefaultListModel<String>
)とカスタムセルレンダラー(拡張DefaultListCellRenderer
)を使用します。読みやすくするために、これらのクラスをメインクラス内にネストしました。
通常、これらのクラスを静的にします(これは、セルレンダラーに対して行いました)が、リストモデルクラスには次のメソッドがあります。
private boolean showRemoveConfirmDialog(Object elem) {
int option = JOptionPane.showConfirmDialog(BrushListDialog.this,
elem + " is a default brush type.\nDo you want to allow the removal of such entries?",
"Remove", JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE);
if (option == JOptionPane.YES_OPTION) {
TYPES.clear();
return true;
}
return false;
}
ご覧のとおり、JOptionPane
の表示位置を決定するために、最上位クラスのインスタンスに依存しています。BrushListDialog.this
もちろん、静的コンテキスト内で呼び出すことはできないため、ネストされたクラスを静的にすることはできません。
これを処理する3つの方法があります(null
の最初のパラメーターに使用することshowConfirmDialog
はオプションではありません)。
- セルレンダラーを静的に保ちますが、を呼び出せるようにするために、リストモデルを内部クラスにします
BrushListDialog.this
。 - ネストされた両方のクラスを静的にし、現在の
BrushListDialog
インスタンスをリストモデルのコンストラクターに渡します。 - Swingユーティリティメソッドを使用してコンポーネントを調べ、のインスタンスを見つけます
BrushListDialog
(これは私の意見ではハッキーです)。
だから私はあなたに尋ねます:それだけの価値のある親ダイアログのインスタンスにアクセスできるようにするために、リストモデルを非静的に保ちますか?