PopupMenu使用時の疑問

このQ&Aのポイント
  • Windowsのペイントのツールバーと同様の機能をJavaで実現する方法について質問です。
  • ボタンのマウスイベントのリスナーの登録方法やクラスの使い方について教えてください。
  • JButtonのprocessMouseEventメソッドの使い道についても知りたいです。
回答を見る
  • ベストアンサー

PopupMenu なのでしょうか?

こんにちは、趣味でプログラミングをしているものです。 さっそくですが質問させていただきます。 Windows には標準でペイントが付属していますが、 ペイントのツールバーにあるボタンにマウスがエンターすると x座標はそのボタンのx座標 、y座標はツールバーの真下のy座標に そのボタンの操作の説明文が表示されますが、 同様のことをJavaでやろうと思った場合、 ボタンのマウスイベントのリスナーとして、 ボタン自身か、親のコンポーネントを登録するものなのでしょうか? それと表示されるメッセージのクラスはJPopupMenuのインスタンスを show するものなのでしょうか? それと、関係ないかもしれませんが、 JButton について processMouseEvent のメソッドは どのようなときに使うのでしょうか? ご存知のかた、教えていただけないでしょうか? よろしくお願いします。

noname#173931
noname#173931
  • Java
  • 回答数3
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
  • ngsvx
  • ベストアンサー率49% (157/315)
回答No.3

>cssのスタイルシートの設定、css ファイルを参照させる さすがにそれは出来なかったように思います。 詳しいこことは申し訳ないですがわかりません。

noname#173931
質問者

お礼

さっそく回答していただきありがとうございます。 いろいろ指摘していただけたので、 ツールチップを表示できました。 貴重な時間をさいての回答、ありがとうございました。

その他の回答 (2)

  • ngsvx
  • ベストアンサー率49% (157/315)
回答No.2

未確認ですが、ツールチップテキストにはhtmlが使えるようですので、それで制御したらいいのではないかと思います。

noname#173931
質問者

お礼

お礼が遅れてしまいもうしわけありません。 教えていただけた html で制御 をヒントに 以下のサイトをみつけ、 bgcolor,font 等を設定することができました。 ありがとうございます。 http://docs.oracle.com/javase/tutorial/uiswing/components/html.html もしよろしければ、もう少し教えていただきたいのですが、 setToolTipText に設定するhtml文中で、 cssのスタイルシートの設定、 css ファイルを参照させる、ということはできるのでしょうか? ご存知であれば、教えていただけないでしょうか? よろしくお願いします。

  • ngsvx
  • ベストアンサー率49% (157/315)
回答No.1

swingのコンポーネントでは(JComponent)、 setToolTipTextというメソッドで、実現できます。

noname#173931
質問者

お礼

さっそく回答していただきありがとうございます。 おしえていただいた setToolTipText で説明文が表示できました。 おそれいりますが、もう少し教えていただきたいのですが、 このメソッドで表示できるテキストをもう少し大きなフォントで 表示することはできるのでしょうか? ご存知ならば、教えていただけないでしょうか? よろしくおねがいします。 とにかく、貴重な時間をさいての回答、ありがとうございました。

関連するQ&A

  • Javaにおけるイベント処理

    JFrame  SpritPanel   SpritPanel    JPanel     JButton A     JButton B     JButton C    JList A   SpritPanel    JList B    JTable C という構成で、JButton A をクリックしたらJList AにJButton A用のなんらかのリストを表示し、JButton BをクリックしたらJList BにJButton B用のなんらかのリストを表示し、・・・ と1つGUI部品で発生するイベントで1つまたは複数のGUI部品の更新処理を行いたいのですが、イベントリスナをどこに実装させて、どこに更新処理を書くかで迷います。 例えば、押されるJButton Aにイベントリスナーのメソッドを実装し、そこで処理を書く場合はJList Aをこのメソッド内から見えるようにしなけなくて、それをするためにインスタンスを渡したりするのが面倒に感じています。 様々なGUI部品やパネルで構成され、イベントが起きたら複数のGUI部品が更新が必要となるようなGUIアプリケーションを作る場合、どのようにイベントを処理させるのが王道なのでしょうか。 うまく質問できないので、質問内容に不明な点があれば補足いたします。

    • ベストアンサー
    • Java
  • Flashでのインスタンスの座標について

    こんばんは。 一つflashのインスタンスの座標について質問なのですが、 試しに actionscriptで  _root.attachMovie("1","2",1); _root[2]._x = 300; という動作をさせたところ、_root[2]のx座標を300に設定していてもステージのx=300(左上を0,0とした座標)の位置と違う位置に表示されてしまいます。 これは何故このような現象がおきてしまうのでしょうか?ステージのx,yとインスタンスのx,yは基点が違うのでしょうか?ご教授頂ければ幸いです。

  • javascriptでオブジェクトのメソッドを使う

    JavaScriptでnewでオブジェクト化したクラス(?)のメソッド、フィールドを利用する方法を教えて下さい。 javascriptにもオブジェクト化という考え方があると聞いたのですが、 例えば、Javaでいうsetter getterのようなメソッドを作り、使用することはできるのでしょうか? 下記のようなコードを実行したところ Uncaught TypeError: Object #<mousePosi> has no method 'setPara' というエラーが出てしまい、setParaというメソッドはない。と言われてしまいます。 しかし、mousePosi()をオブジェクト化することはできているようなので、 setParaとgetParaを使えるのではないかとおもいました。 どなたかアドバイス下さい。お願いします。 ------------------------------------------------------------------------------------------------- (function LineMain() { console.log("マウスの位置座標を表示"); // console.log("X座標=" + mymouse.x + ",Y座標=" + mymouse.y); //マウスムーブでeventControlを呼び出し addEventListener("mousemove", eventControl, false); function eventControl(event) { var event = event; var myMousePosi = new mousePosi(); myMousePosi.setPara(event); // console.log("X座標=" + obj.getMouse().x + ",Y座標=" + obj.getMouse().y); } function mousePosi() { var paraMouse = { x : 0, y : 0 }; function setPara(event) { this.paraMouse.x = event.x; this.paraMouse.y = event.y; } function getPara() { return this.paraMouse; } } })();

  • Javaのマウスイベントについて

    閲覧ありがとうございます、Java初心者です。 現在Javaの勉強をしており、マウスの座標を取得しその座標に座標を描画 するプログラムを作っているのですが、どうしても上手くいきません・・・以下が ソースです↓ import java.awt.*; import java.awt.event.*; public class test01 extends Frame { int x, y; public static void main(String[] args) { new test01(); } test01() { super("FrameTest"); //フレーム名 setSize(300, 300); //サイズを設定 MyCanvas mc = new MyCanvas(); //グラフィック用メソッドをインスタンス化 add(mc); //フレームに描画 addMouseMotionListener(new getMouse_position()); System.out.println("(" + x + "," + y + ")"); setVisible(true); //フレームを表示 addWindowListener(new Close()); //クローズ処理 } /*** グラフィック描画用クラス ***/ public class MyCanvas extends Canvas { public void paint(Graphics g) { g.drawString("(" + x+ "," + y + ")", x, y); } } /*** マウス操作用クラス ***/ public class getMouse_position extends MouseAdapter { public void mouseMoved(MouseEvent ev) { x = getX(); //マウスのx座標を取得 y = getY(); //マウスのy座標を取得 repaint(); } } } /*** クローズ用クラス ***/ class Close extends WindowAdapter { public void windowClosing(WindowEvent e) { System.exit(0); } } これを実行すると、ずっと(0, 0)のままでマウスの座標を読み取ってくれません・・・何故なんで でしょうか?

    • ベストアンサー
    • Java
  • java swing での質問です。

    javaのプログラミングをeclipseでしているのですが swingで行き詰ってしまいました。 タブペインを使いタブパネルを作り、その中にボタンを配置したのですが、 ボタンの位置をsetBoundsで動かすことができませんでした。 他の命令を使わなければならないのでしょうか? プログラミング自体が初心者のため、説明に不備があると思いますが 助けていただけると幸いです。 ひどいプログラミングかと思いますが張らせていただきました package gui; import java.awt.*; import javax.swing.*; public class ReisyokuMenu extends JFrame{ /*serialVersionUID*/ private static final long serialVersionUID=1L; /*コンポーネント作成*/ JButton syokuzaiBtn = new JButton("食材一覧"); JButton syoumiBtn = new JButton("賞味期限順"); JButton bunruiBtn = new JButton("分類"); JButton returnBtn=new JButton("Topへ"); JPanel tabPanel1 = new JPanel(); JPanel tabPanel2 = new JPanel(); JTabbedPane tabbedpane = new JTabbedPane(); public ReisyokuMenu(){ /*Closeボタンでアプリケーションが終了しないように設定*/ setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); /*フレームサイズを変更できないように設定*/ setResizable(false); /*フレームコンテナのインスタンスを生成*/ Container cPane = getContentPane(); /*レイアウトマネジャを利用しない(座標を指定する)*/ cPane.setLayout(null); setLocationRelativeTo(null); setSize(400, 380);//setBoundsはy、x、幅、高さを指定するのでsetLocationRelativeToで位置指定をする為に使用。 setTitle("一人暮らし支援ツール");//アプリケーションタイトルを入れる tabbedpane.addTab("食材を見る", tabPanel1); tabbedpane.addTab("食材を探す", tabPanel2); tabPanel1.add(syokuzaiBtn); tabPanel1.add(syoumiBtn); tabPanel1.add(bunruiBtn); syokuzaiBtn.setLocation(50, 80);//「選択」ボタン syoumiBtn.setBounds(10,10,325,120); bunruiBtn.setBounds(10,270,90,40); tabPanel2.add(new JLabel("食材名:")); tabPanel2.add(new JTextField("", 10)); setContentPane(tabbedpane); } public void setVisible(boolean isVisible){ if(isVisible){ /*フレームの表示位置を指定(x,y)*/ setLocation(200,200); } /*フレームを表示*/ super.setVisible(isVisible); } }

  • Flash AS3 減速運動の不具合の回避方法を教えて下さい

    大重美幸様のAS3.0入門ノートを使って勉強しているものです。 今回その中の「EaseingSimpleクラス」を拡張して、 任意のボタンを押すと、予めそのボタンに引数として登録しておいたステージ上のX座標、Y座標にインスタンスが減速しながら移動するクラスを作ってみました。 そこで問題発生なのですが、 ステージにボタンを二つ以上設置(仮にAとBとします)して、 「Aのボタン」をマウスダウンしてインスタンス(IdoObjとします)の移動開始して、それが指定の座標に到達する前(移動中)に「Bのボタン」を押すと意図しない座標にインスタンスが止まってしまいます。 確実に、インスタンスが静止して、次のボタンを押せば問題は起きないのですが、移動先をすぐに変更させる動きを付けるにどうしたらよいのでしょうか? よろしくお願いいたします。 タイムラインのフレームアクション idoObj→移動するインスタンス btA→ボタンA 100,100→btAが渡すX座標,btAが渡すY座標 btB→ボタンB 200,200→btBが渡すX座標,btBが渡すY座標 ********************************************************** var btObj:idoStage=new idoStage(idoObj,btA,100,100); var btObj2:idoStage=new idoStage(idoObj,btB,200,200); ********************************************************** 今回作製したidoStageクラス(下記のEaseingSimpleクラスを拡張) ********************************************************** package{ import flash.display.MovieClip; import flash.events.MouseEvent; import EaseingSimple; public class idoStage extends EaseingSimple{ var my_mc2:MovieClip;//任意のボタン var zahyoX:Number;//x座標 var zahyoY:Number;//y座標 //コンストラクタ function idoStage(mc:MovieClip,mc2:MovieClip,stgX:Number,stgY:Number){ super(mc); my_mc2=mc2; zahyoX=stgX; zahyoY=stgY; my_mc2.addEventListener(MouseEvent.MOUSE_OUT,onOUT); my_mc2.addEventListener(MouseEvent.MOUSE_OVER,onOVER); my_mc2.addEventListener(MouseEvent.CLICK,onCLICK); } public function onOUT(event:MouseEvent):void{ my_mc.stop(); my_mc2.buttonMode=false; my_mc2.alpha=1; } public function onOVER(event:MouseEvent):void{ my_mc2.buttonMode=true; my_mc2.alpha=0.5; } //引数で受け取った座標を「EaseingSimpleクラスのeaseTo」に渡してイーズする public function onCLICK(event:MouseEvent):void{ easeTo(zahyoX,zahyoY); my_mc2.buttonMode=true; my_mc2.alpha=0.3; } } } ********************************************************** EaseingSimpleクラス (ステージをクリックするとその位置にインスタンスが減速しながら移動します。) ********************************************************** package { import flash.display.MovieClip; import flash.geom.Point; import flash.events.Event; public class EaseingSimple { var my_mc:MovieClip; var endPoint:Point; //コンストラクタ function EaseingSimple(mc:MovieClip) { my_mc = mc; } //イーズ開始 public function easeTo(end_x:Number, end_y:Number):void { endPoint = new Point(end_x, end_y); my_mc.addEventListener(Event.ENTER_FRAME, easeStep); } //繰り返しステップ private function easeStep(event:Event):void { var mcPoint:Point = new Point(my_mc.x, my_mc.y); //2点間の距離 var distance:Number = Point.distance(mcPoint, endPoint); if (distance>1) { var tmpPoint:Point = getTmpPoint(); my_mc.x = tmpPoint.x; my_mc.y = tmpPoint.y; } else { my_mc.x = endPoint.x; my_mc.y = endPoint.y; my_mc.removeEventListener(Event.ENTER_FRAME, easeStep); } } //座標計算 private function getTmpPoint():Point { var tmpX:Number = my_mc.x + (endPoint.x - my_mc.x) * 0.3; var tmpY:Number = my_mc.y + (endPoint.y - my_mc.y) * 0.3; var tmpPoint:Point = new Point(tmpX,tmpY); return tmpPoint; } //イーズ中断 public function stop():void { my_mc.removeEventListener(Event.ENTER_FRAME, easeStep); } } } ********************************************************** 製作環境 FlashCS3

    • ベストアンサー
    • Flash
  • Delphi6 OnMouseUp

    deiphi6です。 OnMouseDown,OnMouseMoveイベントで返ってくるX,Y座標値と、OnMouseUpで返ってくるX,Y座標値に違いがあります。 例えば、 ScrollBoxの中にPaintBoxを置いて、PaintBoxのWidth(Height)を32768以上にします。 実行させ、スクロールさせてPaintBoxが32768以上のポイントでマウスボタンを押して離すと。 OnMouseUpで返ってくるX(Y)座標はマイナスになります。 また、65536以上にするとまた1から始まるプラスのX座標がかえってきます。 OnMouseDown,OnMouseMoveでは正常なプラス値です。 つまり、Intergerで返ってきてないってことですか? OnMouseMoveでの座標を代用して使ってますが、マウスの早い動きには正確を欠きます。 何かいい回避方法はありませんでしょうか?

  • vb2005 マウス座標の取り方

    VB2005(Win.Vista) フォームに置いたPictuteBoxで動いているマウスの座標(X,Y)値を知るにはどうするんでしょうか? たぶん同じだと思いますが、マウスボタンダウン時の座標の取り方もいっしょでしょうか? DelphiからいきなりVB2005にきたので、まったくわかりません。 どこか入門用のサイトありましたら、合わせてお願いします。

  • 動的生成のムービークリップにインスタンス名でアクセスできないようです

    動的生成のムービークリップにインスタンス名でアクセスできないようです FLASHCS3(ActionScript3.0)でアルバムを作っています。 最大で5枚の外部画像を読み込んで (何枚有るかは読み込んでみないと分からない) それを配置させるスクリプトを書いています。 ただ、枚数によってそれぞれ配置させるする場所が異なるります 例えば1枚の時の1枚目の座標と、2枚の時の1枚目の座標は異なります。 これは、FLASHは、画像やファイルが何枚そのフォルダに有るかは セキュリティの関係上分からない(PHPなどを連携すればできるようだが) ので苦し紛れの策です。 numが読み込んだ画像の何枚目かを表しますが それを後で動かしたり出来るようにmcという ムービークリップにいれています。 mc.name = "mc"+num; インスタンス名は mc.name = "mc"+num; としておいて1枚目の時は getChildByName("mc0").x = 295; で所定の座標に配置できます。 ところが2枚目の時は 「null のオブジェクト参照のプロパティまたはメソッドにアクセスすることはできません。」 と表示されてしまい、1枚目の座標は変わらず、2枚目は表示されますが座標が0(左上)に 表示されてしまいます。 試しに//■■■■2枚目の時以下のif文を消すとエラーは出ないのですが なぜ1枚目はエラーがでなくて、2枚目はエラーが出るか分からないのです。 どなたか教えていただけると助かります。 よろしくお願いします。 (以下スクリプトの一部) //■■■■イベントリスナーでnumを渡す loader_obj.contentLoaderInfo.addEventListener(Event.COMPLETE,loadComp(num)); //■■■■イベントリスナー関数 function loadComp(num:int):Function{ return function(event:Event):void{ var loader:Loader = Loader(event.target.loader); var mc = new MovieClip; addChild(mc); addChild(event.target.loader); mc.addChild(event.target.loader); mc.name = "mc"+num; //■■■■1枚目の時 if ( num == 0 ){ getChildByName("mc0").x = 295; getChildByName("mc0").y = 30; } //■■■■2枚目の時 if ( num == 1 ){ getChildByName("mc0").x = 165;//■■■■1枚目の配置を変える getChildByName("mc1").x = 425; getChildByName("mc1").y = 30; } //■終わり } }

    • ベストアンサー
    • Flash
  • 今DirectXでゲームを作っているのですが、どうしても実装できないこ

    今DirectXでゲームを作っているのですが、どうしても実装できないことがあります。 マウスカーソルの近くにある物体をスピードを落としながら話していくという仕様なのですが、ベクトルを使っての実装ができません。どうかわかる方がいましたら回答お願いします。 pV1.x;//マウスカーソルのx座標 pV1.y;//マウスカーソルのy座標 pV2.x;//物体のx座標 pV2.y;//物体のy座標 pOut1.x;//物体のx座標からマウスカーソルのx座標を引いた値 pOut1.y;//物体のy座標からマウスカーソルのy座標を引いた値 D3DXVec2Subtract(&pOut1,&pV2,&pV1);//pV2ベクトルからpV1ベクトルを引いてpOut1に格納する float VecLength=D3DXVec2Length(&pOut1);//pOut1ベクトルの大きさをVecLengthに格納する vecPosition.x=/*ここがわかりません*/ vecPosition.y=/*ここがわかりません*/