[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自宅