[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[jfriends] Re: フレーム閉じ回避
On Sat, 14 Aug 1999 00:06:32 +0900
「[jfriends] フレーム閉じ回避」にて
"Hidekazu Furukawa" <npaka@xxxxxxxxxx> wrote:
> Swingの質問です。
>
> フレーム右上のフレームを閉じるボタンを押したとき
> フレームを閉じないででVisible=falseにする処理をさせたいのですが
> どうすればよいのでしょうか?
>
> InternalFrameListenerの
ほえ? Frame? JFrame? JInternalFrame? どれでせう(^^;
JInternalFrameだと、JBuilder-ML で過去にこう言った回答を出し
ました。本当にこんなので良いかは不明ですが、まぁ動くので良い
か……で済ませてます(笑)
# ここの方が詳しい人が多そうなので、間違ってたら指摘してくれ
# るでしょと期待。
---引用開始---
|> Q. JInternalFrame で "x" を押されても クローズ しなくするにはどうしたら
|> いいのでしょうか?
|>
|> 環境
|> Windows98
|> jdk1.2
|
|Swing1.0.x (私の環境では 1.0.3) と、JDK1.2で、動作が違うみた
|いですね。Swing1.0.3では DO_NOTHING_ON_CLOSE を設定しておけ
|ば、「x」ではクローズしないのですが。
|
|とりあえず、JDK1.2.1 でソースを眺めてみたら、以下でできそう。
|
|//---
|> プログラムソース:
|> import java.awt.*;
| import java.beans.*;
|> import javax.swing.*;
| import javax.swing.event.*;
|>
|> public static void main(String args[]) {
|> JFrame jFrame = new JFrame();
|> jFrame.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
|> JDesktopPane jDesktopPane = new JDesktopPane();
|> jFrame.getContentPane().add(jDesktopPane, BorderLayout.CENTER);
|> jFrame.setSize(400, 400);
|> jFrame.setVisible(true);
|>
|> JInternalFrame jInternalFrame = new JInternalFrame();
|> jInternalFrame.setClosable(true);
|>
|> jInternalFrame.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE)
|> ;
|> jInternalFrame.setSize(200, 300);
|> jDesktopPane.add(jInternalFrame);
| jInternalFrame.addVetoableChangeListener(
| new java.beans.VetoableChangeListener() {
| public void vetoableChange(PropertyChangeEvent e)
| throws PropertyVetoException {
| if (e.getPropertyName().equals("closed")) {
| // "closed"が飛んできた時に、場合に依っては
| // PropertyVetoException を投げてキャンセルする
| // ↓これだと絶対にキャンセル(^^;
| throw new PropertyVetoException("test",e);
| }
| }
| });
|> }
|---
|
|でも、JDK1.2.1のドキュメントでも、んなことかいてないように見
|えるし…。
---引用終了---
| if (e.getPropertyName().equals("closed")) {
の行は、正確には
| if (e.getPropertyName().equals(JInternalFrame.IS_CLOSED_PROPERTY)) {
です。
あと、これだと InternalFrameClosingイベントは発生しないので、
PropertyVetoExceptionを発生する前に Visible=false してください。
---
井浪@xxxxxxxxxx自宅