私はSwing GUIを使ってJava Desktop Applicationを作った。メニューバーには「About」という項目があります。この「About」メニュー項目をクリックすると、JDialogがJOptionPane.showMessageDialog(...)を使用して表示され、アイコン、プログラムに関するテキスト、ダイアログを閉じるための「OK」ボタンが表示されます。背景Java JOptionPaneカスタム描画
ダイアログの背景を移動して色を変える1つ以上のボール(円)の効果を描きたいと思います。
@Titusの溶液で更新されたコード:
カスタムのJOptionPaneクラス:
class MyEffectPane extends JOptionPane {
public MyEffectPane(String message, int type){
super(message, type);
makeOpa(this);
}
// needed to make the drawings visible
void makeOpa(JComponent comp){
for(Component c : comp.getComponents()){
if(c instanceof JPanel){
JPanel p = (JPanel)c;
p.setOpaque(false);
makeOpa(p);
}
}
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
int width = getWidth();
int height = getHeight();
g.setColor(Color.BLACK);
g.fillOval(width/2-50, height/2-50, 50, 50);
}
}
コール/ショーダイアログ:
MyEffectPane pane = new MyEffectPane("message....", JOptionPane.INFORMATION_MESSAGE);
JDialog dialog = pane.createDialog(this, "About");
//dialog.setIconImage(icon.getImage());
dialog.setVisible(true);
dialog.dispose();
'showMessageDialog'メソッドは' static'です(オーバーライドすることはできません)。独自の 'JOptionPane'オブジェクトを作成します。 – Titus
@Titusありがとう、私の問題の解決策をご存知ですか? – trinity420
デバッグ文には、 'System.out.println()'を使わないでください。 'System.out'はバッファされたストリームであるため、必ず実行されるたびに行を出力するとは限りません。代わりに 'System.err.println()'を使用して、すぐに保証された出力を得てください。 –