現在ランチャーをJava 6.0で作成しています。
タスクトレイに常駐できるようTrayIconでタスクトレイにアイコンを表示させて、ウィンドウでは作成したボタンか閉じるボタンを押すことでウィンドウを不可視状態(setVisible(false);)にするようにしています。
しかし、タスクトレイのポップアップメニュにウィンドウが可視状態の時は不可視に、不可視状態の時は可視状態に切り替わるようなメニュを付けたいのですが、うまくいきません。
なにか良い方法は無いでしょうか?
お願いいたしますm(_ _)m
No.2ベストアンサー
- 回答日時:
そもそも、JFrameオブジェクトのコンテナ(ContentPane???)だけをsetVisible(true/false)するとか、JFrameオブジェクトのコンテナがstaticオブジェクトである、というあなたのコードの状況が、完全にヘンです。
通常、アプリケーションのメインのコンテナはJFrame自身であり、しかもそれはnewされて作られたオブジェクトであり、staticではありえません。--staticなコンテナは、あなたが開閉したいJFrameオブジェクトではありえない!。ごくふつうに常識的にやれば、あなたの目的は達成されます(下のプログラムを試してみてください--全角スペースは半角スペース2個に置換してからコンパイルしてください)。ただし、これを「ランチャ」と呼ぶことは疑問です。ふつう、ランチャって、それをクリックしたらアプリケーションが起動することでは?。
----------------------------------------------------
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import javax.imageio.*;
public class Deee{
Window win;
MenuItem house;
SystemTray systray;
Image img;
PopupMenu pmenu;
TrayIcon icon;
public void setLauncher(Window w) throws Exception{
win = w;
systray = SystemTray.getSystemTray();
img = ImageIO.read(new File("images/Icon.PNG")); // image -> images
PopupMenu pmenu = new PopupMenu("--ランチャ--");
house = new MenuItem("格納/表示");
house.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
if (e.getSource() == house){
if (win.isShowing()){
win.setVisible(false);
}
else {
win.setVisible(true);
}
}
}
});
pmenu.add(house);
icon = new TrayIcon(img, "ランチャ", pmenu);
systray.add(icon);
}
/* main() for test */
public static void main(String[] args) throws Exception{
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
frame.setBounds(200, 200, 400, 400);
frame.setVisible(true);
Deee d = new Deee();
d.setLauncher(frame);
}
}
----------------------------------------------------
そうですよねぇ…JFrameがstaticなのはやはりおかしいですよね・・・
おかしいとは思ったのですが、eclipseのエラーの対処(?)みたいのでそのように促されたので、わからなかったためとりあえずstaticにして、放置して他の部分を作っていました…
他の人にも相談したり考えたりした結果、私自身javaの初歩的な考えが間違っていたというか忘れていたというか…そんな感じでした^^;
_ranco_さんのプログラムを参考にして、自分なりにも試行錯誤した結果、なんとかうまく動作させることが出来ました!
本当にありがとうございました!
ちなみに「ランチャと呼ぶことは疑問です」とありましたが、格納と表示という動作を付けたかったので、ランチャの機能のプログラムは別部分で作成していました。
No.1
- 回答日時:
> うまくいきません。
うまくいかないプログラムのコード、またはその小さなひな形を投稿してください。でっかい長いコードはノー!。小さなサンプルプログラムをお願いします。
遅くなって申し訳ありません。
ポップアップメニュのみで操作すると
ウィンドウの中身だけ消える→中身が戻る
となり、ウィンドウ→ポップアップメニュと操作すると
ウィンドウが隠れる→押しても表示されない
となります。
ポップアップメニュのアクションがいけないのでしょうが…
class TaskTray ~ {
MenuItem house;
TaskTray() ~ {
SystemTray systray = SystemTray.getSystemTray();
Image img = ImageIO.read(new File("image/Icon.PNG"));
PopupMenu pmenu = new PopupMenu("ランチャ");
house = new MenuItem("格納/表示");
house.addActionListener(this);
pmenu.add(house);
TrayIcon icon = new TrayIcon(img, "ランチャ", pmenu);
systray.add(icon);
}
public void actionPerformed(ActionEvent e) {
if ( e.getSource() == house ) {
if ( Frame.container.isShowing() == true ) {
Frame.container.setVisible(false);
}
else if ( Frame.container.isShowing() == false ) {
Frame.container.setVisible(true);
}
}
}
}
class Frame extends JFrame ~ {
static Container container;
public Frame() {
コンテナやその他の設定
setDefaultCloseOperation(HIDE_ON_CLOSE);
}
}
必要な所だけ書いたつもりですが、こんな感じで大丈夫でしょうか?;
よろしくお願いいたします。。。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(Microsoft Office) windows10で作業を終了する際の「保存しますか はい いいえ」を表示させずに自動で保存する方法 6 2023/03/15 11:29
- JavaScript [Java] Edgeでのアドレスバー非表示について 3 2022/04/20 17:51
- 警察官・消防士 乙4「有資格者不在」の状態は? 2 2022/12/23 12:52
- Windows 10 Windows10でボリュームのアップダウンを簡単にできる方法ないですか? 1 2023/06/20 13:06
- その他(ソフトウェア) Figma 1 2023/06/23 14:22
- Visual Basic(VBA) excel vba でユーザーフォーム入力ができない 2 2022/12/12 14:42
- Windows 10 (続き)2つのウィンドウ選択時の表示について 6 2023/08/13 15:05
- LANケーブル・USBケーブル パソコンについて 2 2022/03/28 18:30
- Chrome(クローム) googleアカウントのアイコンをローマ字または漢字で表示させたい 2 2023/05/06 22:25
- Word(ワード) Microsoft Word2023で、修正箇所を表示させたい 1 2023/02/09 10:07
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【Swing】JPanel クラス外から...
-
ウィンドウなしで画像表示
-
コンパイルエラー <identifier...
-
JPanelの切り替えと再描画
-
整数を好きなだけ入力し、個数...
-
スクロールバーの初期化(Java)
-
JPanelの重ね方/OverlayLayout他
-
BMI測定を作ろうとしている...
-
setPrefferedSizeとsetSize
-
チェックボックスを動的に生成する
-
Java-Swing TextAreaにスクロー...
-
JTextFieldのgetTextについて
-
java キーボード入力された値の...
-
C言語のポインターに関する警告
-
System.out.printlnの出力先
-
変数を動的に利用するには?
-
ダブルクォーテーションのrepla...
-
コマンドライン引数の例外処理...
-
配列の中に複数存在する数がい...
-
ページング
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
java junit list同士の比較方法
-
JPanelの切り替えと再描画
-
JavaでのSwingを使った簡易電卓...
-
setPrefferedSizeとsetSize
-
javaで文字数制限するには?
-
4択クイズでのランダム出題の...
-
最後の行に移動するには?
-
TextAreaでの文字の色
-
JPanelの重ね方/OverlayLayout他
-
KeyListenerの使い方について
-
【Swing】JPanel クラス外から...
-
JDialogを閉じた時の処理
-
JButton-背景の透明化
-
JTable の 列幅を個別に設定す...
-
VB6.0でのTextboxの高さ変更
-
エラーで式の開始が不正ですと...
-
シンボルを解決できません
-
ウィンドウなしで画像表示
-
’じゃんけん’をするプログラム...
-
【AWT】別ウィンドウのLabel設...
おすすめ情報