• ベストアンサー

クリックでGUI部品を追加する

akinori_sの回答

  • akinori_s
  • ベストアンサー率60% (21/35)
回答No.3

>「視覚上のコンポーネントの数とgetComponentの数が違う時はどのような原因が考えうるか」 とりあえず、Component#list(System.out)を使用して コンポーネントのリストを出力し、ボタンを押す前と後で どこが違うか調べてみたらどうでしょうか。

noname#1600
質問者

お礼

オブジェクトの状態から、他のメソッドからそのオブジェクトをいじっていたことがわかりました。 ありがとうございました。

関連するQ&A

  • ボタンクリックでパネル表示方法?(JBuilder)

    ボタンをクリックしたタイミングで、パネルを生成しそれを表示したいのですが表示されません。下記のロジックに問題または、足りないものがありますか? void btnA_mouseClicked(MouseEvent e) { Panel1 pnlSub = new Panel1(); pnlSub.setVisible(true); } ちなみにパネルはSwingのJPanelではなくAWTのPanelを生成しております。

    • ベストアンサー
    • Java
  • 現在JAVA+SWINGでGUIアプリケーションを作成しています。

    現在JAVA+SWINGでGUIアプリケーションを作成しています。 JPanelのレイアウトマネージャーCardLayoutで10枚程度のページを作成し、パネル上のボタンをクリックすると次のページにジャンプする機能を実装中です。 いまのところパネル上のボタンをクリックし、パネル遷移をさせる方法として、一つのメインclassにパネルのすべてのパラメーターを記述しています(要はそのアプリはいまのところ、一つのjavaファイル) 希望としてはオブジェクト指向らしく、複数のクラスの組み合わせでつくりたい(それぞれのパネルは独立したclassでメインclassはパネルclassの呼び出しだけ)のですが、ページの切替Actionを独立したクラスにどのように記述すればよいのかわからない状態です。 構成 mainFrame mainPanel(CardLayout) subPanel01 button01(ボタンをクリックするとmainPanel上のsubPanel02へ切り替わる) subPanel02 button02(ボタンをクリックするとmainPanel上のsubPanel01へ切り替わる) やりたいこと subPanel01とbutton01を別のjavaファイル(class)として分け、mainPanelにはclassの呼び出しただけで、構成管理を簡略化したい 上記のことを実装しようとすると。子classのActionイベントで親のパネルに指示を出せないとパネルが切り替わらないとおもうのですが、このような実装は可能でしょうか? 初心者で申し訳ございませんが、宜しくお願いします。

    • ベストアンサー
    • Java
  • ラベルをプログレスバーのように伸び縮みさせるには?(Jbuilder)

    都合により、Swingのコンポーネントが使えない為AWTのコンポーネントでプログレスバーのようなものを作りたいのです。 パネルの上にラベルを置いて、そのラベルをドラッグして長さを調節するといいかなと思いましたがどのようにすればよいのかまったくわかりません・・・ 作りたいのは、ラベルをクリックして任意の長さまで伸び縮みさせられるようなコンポーネントです。

    • ベストアンサー
    • Java
  • フレーム内のラベルやテキストフィールドなどを真っ直ぐ揃えたいのですが

    つい最近JAVAのSWINGクラスとよばれるGUIプログラムを勉強したばかりの人です。 現在ラベル3つとテキストフィールド3つを交互に並び、 フレームの中の下段に中央にボタンが2つあるようなフレームを作成したいです。そして、ボタンを押したらラベル4が表示されるようにするのが目標です。 ↓こんな感じです。 ----------------------------------- ラベル1   テキストフィールド1 ラベル2   テキストフィールド2 ラベル3   テキストフィールド3      (ラベル4(ボタン押したら表示)) ボタン1  ボタン2 ------------------------------------- 単純にJLabelとJTextFieldを交互にソースに書いて getContentPane().add(p, BorderLayout.CENTER);と中央揃えに設定しても、ずれてしまいます。その上、仮にラベル1とラベル2の行の位置が上の場合でも、ラベル1または2の文字数でずれ込みます。 分からないことだらけですが、上のようにまっすぐ揃う方法をお教え下さい。

    • ベストアンサー
    • Java
  • Netbeans6 swingでの画面切替について

    Netbeans6 swingでGUIアプリを作成しようとしています。 swingは初心者です。 簡単な画面切替ができず、理解に困っています。 画面構成 ・画面1 ・画面2 目的:画面1のボタンを押されると画面2を表示したい。 構成 ・MainFlame.java ⇒ フレームと画面1(パネルを定義) ・Panel01.java ⇒ 画面2(パネル) 今後、ログイン⇒メニュー⇒入力画面(複数)といった具合にしたいので、1画面1クラスで行いたいです。 こういった場合どうすれば画面がきりかわるのでしょうか? よろしくお願いします。 ボタンクリック時のイベント部分にはこう書いてますが動きません。 private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: remove(jPanel1); Panel01 panel = new Panel01(); add(panel); validate(); }

    • ベストアンサー
    • Java
  • ボタンクリック後パネルを再描画repaintしたい

    ボタンをクリック後にstaticで保持していた値にプラス1して その値をパネルに再描画したいと思っています。 下記のプログラムだとボタンをクリックすると (<1<2<3<4)となって画像と数字が増えてしまいます 行いたいのは数字の部分だけが再描画されて カウントされて<3と表示されるだけになってもらいたい クラス1つ目 import java.awt.BorderLayout; import java.awt.Cursor; import java.awt.event.MouseEvent; import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; public class Sample extends JFrame{ static int value=1; JPanel work = new JPanel(); public static void main(String[] args) { Sample frame = new Sample(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setBounds(100, 200, 200, 100); frame.add(frame.createPanel(), BorderLayout.LINE_END); frame.setVisible(true); } public JPanel createPanel() { ImageIcon icon = new ImageIcon("./img/left.gif"); JLabel label = new JLabel(); Cursor c = new Cursor(Cursor.HAND_CURSOR); label.setCursor(c); label.setIcon(icon); JLabel strLabel = new JLabel(); String str = Integer.toString(value); strLabel.setText(str); work.add(label); work.add(strLabel); label.addMouseListener(new myListener()); return work; } class myListener extends MouseAdapter{ public void mouseClicked(MouseEvent e){ System.out.print(Sample.value++); createPanel().repaint(); setVisible(true); } } } クラス2つ目 import java.awt.event.MouseEvent; import java.awt.event.MouseListener; public class MouseAdapter implements MouseListener{ public void mouseClicked(MouseEvent e){} public void mouseEntered(MouseEvent e){} public void mouseExited(MouseEvent e){} public void mousePressed(MouseEvent e){} public void mouseReleased(MouseEvent e){} }

    • ベストアンサー
    • Java
  • C++でGUIアプリケーションを作成するには?

    C++でGUIアプリケーションを開発しようとしていますが、どのように作成すればよいのかわからなかったため、質問させて頂きました。 アプリケーションのイメージとしては、ボタン・背景などはすべてこちらの用意した画像で表示し、Windowsっぽいテイストは一切出さないアプリケーションです。ボタンを押すと画面全体が切り替わるイメージです(例えばプリクラみたいな) 現在JavaのSwingでアプリを作成しており、全体が切り替わる機能としてはJPanelのCardLayoutを使用しています。 ボタンはJButton等で完全に画像onlyのアプリを実現しています。 ただ、JavaはWEBカメラからの画像取得が640*480が限界であり、カメラの限界性能(1600*1200等)が使用できるopencv(c++)で画像キャプチャのところだけ作成しました。 このままアプリ全体はJavaで作成し、画像キャプチャ時はc++のexeを裏で実行させるという方法もあるのですが、言語を統一したほうがいいのではないか?と思ったので現在c++でGUIアプリの作成方法を調べています。 参考になるページもご紹介いただけるとありがたいです。

  • system.exit(0)について

    GUIを使ってフレームにパネルのっけて、ボタンを押すとそのフレームが開くようにしました。 で消すときにsystem.exit(0)を実行するとそのプログラム自体が終了してしまうじゃないですか?そうではなくて、そのフレームだけが閉じるようにするメソッドはないのですか?単に、setVisible(false)にするしか方法はないのですか?教えて

  • Swingで作ったウィンドウの最小化と復元

    ウィンドウを最小化時にタスクトレイに入れ,タスクトレイのアイコンを ダブルクリックすることで元に戻るようなプログラムを考えています。 GUIはSwingで実装するつもりです。 タスクトレイにアイコンを表示し,最小化時にイベントリスナーから setVisible()を呼ぶことでウィンドウをタスクトレイに入れるところまでは できましたが,アイコンをダブルクリックした時に再びsetVisible()を呼んでも 最小化された状態で表示され,元の場所・サイズに戻して表示することができません。 解決法としては ・プログラム側からウィンドウの最小化を解除,元に戻す ・最小化ボタンを押された時に最小化しないようにする の 2 つを考えましたが,どちらも実装法がわかりません。 また,これら以外に方法はあるのでしょうか。 よろしくお願いします。

  • JAVA+SWING+WEBカメラを使用して、WEBカメラの動画を表示

    JAVA+SWING+WEBカメラを使用して、WEBカメラの動画を表示させるGUIアプリーションを開発しています。 JFrame上に「player.getVisualComponent()」をaddするとフレーム全体に画像が表示されますが、以下のソースコードの様に「player.getVisualComponent()」をJPanel上にaddするとPanelのサイズ一杯に動画が表示されるのではなく、WEBカメラのデフォルトサイズで必ず表示されてしまいます。 JPanel上で任意の大きさでWEBカメラからの動画を表示させることは可能なのでしょうか? ちなみにWEBカメラの動画表示アプリのソースコードは以下の通りです。 import javax.media.*; import javax.swing.*; public class ImageView { public static void main(String args[]) throws Exception { JFrame frame = new JFrame("ImageView"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Player player = Manager.createRealizedPlayer(new MediaLocator("vfw://0")); JPanel panel = new JPanel(); panel.add(player.getVisualComponent()); frame.setBounds(100, 100, 640, 480); frame.getContentPane().add(panel); frame.setVisible(true); player.start(); } } 宜しくお願いいたします。

    • ベストアンサー
    • Java