• 締切済み

ListSelectionListenerのvalueChangedメソッドが2度呼び出される

ListSelectionListenerをセットした JListのアイテムを選択した時に呼び出されるvalue Changedメソッドが1回選択したときに2回呼び出さ れてしまいます。これはこういった仕様なのでしょう か?2回の呼び出しがどのようなタイミングで呼びだ されるのでしょうか、1回だけ呼び出されるようにす るにはどのようにすればよいのでしょうか?ご存知の 方、お願いします 実行環境 Windows2000 J2SDK 1.4.1 ****************以下問題起こるのソースコード*********** import javax.swing.*; import javax.swing.event.*; public class ListTest implements ListSelectionListener { public static void main(String[] args) { JFrame frame = new JFrame(); String[] item = {"list1","list2","list3","list4"}; JList list = new JList(item); list.addListSelectionListener(new ListTest()); frame.getContentPane().add(list); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(50,100); frame.setVisible(true); } public void valueChanged(ListSelectionEvent e) { System.out.println("list changed"); } }

みんなの回答

noname#6074
noname#6074
回答No.1

ejbしか経験がない者です。 勉強がてらデバッグしてみました。 勉強になりました。 仕様のほどまでは判りません。 *************************** import javax.swing.*; import javax.swing.event.*; public class ListTest implements ListSelectionListener { public static void main(String[] args) { JFrame frame = new JFrame(); String[] item = {"list1","list2","list3","list4"}; JList list = new JList(item); list.addListSelectionListener(new ListTest()); frame.getContentPane().add(list); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(50,100); frame.setVisible(true); } public void valueChanged(ListSelectionEvent e) { if (e.getValueIsAdjusting()){ //ここがミソのようです System.out.println("list changed"); } } }

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • swingのJframeについて

    JFrameについて質問があるのですが import javax.swing.*; public class JFrameTest extends JFrame{ public static void main(String[] args){ JFrameTest frame = new JFrameTest(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setBounds(10, 10, 300, 200); frame.setTitle("タイトル"); frame.setVisible(true); } JFrameTest(){ JPanel p = new JPanel();   Container contentPane = getContentPane(); ContentPane.add(p);   pack(); } } このプログラムと import javax.swing.*; public class JFrameTest{ public static void main(String[] args){ JFrame frame = new JFrame("フレームのタイトル"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setBounds( 10, 10, 300, 200); frame.setVisible(true); JPanel p = new JPanel();   Container contentPane = frame.getContentPane(); frame.ContentPane.add(p);   frame.pack(); } } このプログラムは何が違うのでしょう? やってることはまったく一緒だと思ってたのですが、全然違うみたいです。 上のプログラムの JFrameTest(){ はコンストラクタと呼ばれるものなのでしょうか? しょぼい質問で申し訳ないのですが誰か教えていただけないでしょうか。

    • ベストアンサー
    • Java
  • paintメソッドでエラー

    以下はSwingのフレーム上に画像を表示させようとして書いたものの全文です。実行するとSyntax errorがでますが、これはどうしてでしょうか。 なおべつのプログラムでmainメソッドとpaintメソッドを同じクラスに書いたらうまく表示できました。 アドバイスお願いします。 import java.awt.Graphics; import java.awt.image.BufferedImage; import javax.imageio.ImageIO; import javax.swing.JFrame; public class MyImage3 {  public static void main(String[] args) {   MyFrame7 frame1=new MyFrame7();   frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);   frame1.pack();   frame1.setBounds(100,100,400,320);   frame1.setVisible(true);  } } class MyFrame7 extends JFrame{  public MyFrame7(){   public void paint(Graphics g){   //この行でSyntax error発生    BufferedImage bImage1=null;    try {     bImage1=ImageIO.read(getClass().getResource("k_1pin.gif"));    } catch (Exception e) {     e.printStackTrace();    }    g.drawImage(bImage1,40,40,this);   }  } }

    • ベストアンサー
    • Java
  • javaのpanelが表示されません

    下記のプログラムを作ったんですが、eclipseで実行するとフレームは表示されますが、空のフレームのような状態で、panelやボタンなどは表示されません。mainとは別のクラスで作成してるからなんでしょうか?よろしくお願いします。 import java.awt.BorderLayout; import java.awt.Container; import java.awt.Dimension; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.table.DefaultTableModel; public class Table0 { public static void main(String[] args) { new Frame0(); } } class Frame0{ JFrame frame; JPanel panel; JScrollPane jsp; JTable table; DefaultTableModel dtm; public Frame0(){ frame=new JFrame("table"); frame.setBounds(30, 30, 300, 200); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); table=new JTable(8,5); jsp=new JScrollPane(table); jsp.setPreferredSize(new Dimension(250, 70)); panel=new JPanel(); panel.add(jsp); Container c=frame.getContentPane(); c.add(panel,BorderLayout.CENTER); } }

    • ベストアンサー
    • Java
  • javaのフレームにサイズがセットされてない?

    前回、http://okwave.jp/qa/q8069621.htmlで質問しました。 回答をもとにframe.setvisible(true)をコンストラクタの最後にするとうまくいき回答を締め切ったんですが・・・。 しかし、mainメソッドにframe.setvisible(true)を書くとフレームのタイトル部分だけとなり、 サイズがセットされないまま実行したときと同じようになってしまいます。 なぜでしょう?よろしくお願いします。 import java.awt.BorderLayout; import java.awt.Container; import java.awt.Dimension; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.table.DefaultTableModel; public class Table0{ public static void main(String[] args) { Frame0 test=new Frame0(); test.setVisible(true); } } class Frame0 extends JFrame{ JFrame frame; JPanel panel; JScrollPane jsp; JTable table; DefaultTableModel dtm; public Frame0(){ frame=new JFrame("table"); frame.setBounds(30, 30, 300, 200); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); table=new JTable(8,5); jsp=new JScrollPane(table); jsp.setPreferredSize(new Dimension(250, 70)); panel=new JPanel(); panel.add(jsp); Container c=frame.getContentPane(); c.add(panel,BorderLayout.CENTER); } }

    • ベストアンサー
    • Java
  • TABキーの検出

    Swingコンポーネントで、TABキーのイベントを取得する 方法を教えてください。 タブキー以外は検出できるのですが… import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import javax.swing.JFrame; import javax.swing.JPanel; public class TabKeyListener { public TabKeyListener() { JPanel panel = new JPanel(); panel.addKeyListener( new KeyListener(){ public void keyPressed(KeyEvent e) { System.out.println(e.getKeyCode()); } public void keyReleased(KeyEvent e) { } public void keyTyped(KeyEvent e) { } } ); JFrame frame = new JFrame(); frame.add(panel); frame.setBounds(100,100,200,200); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); panel.requestFocusInWindow(); } public static void main(String[] args) { new TabKeyListener(); } }

    • ベストアンサー
    • Java
  • メニューバーのプログラム

    javaで、メニューバーの項目を選んだら動作するプログラムを試しに組んでみようとしたのですがうまくいきません。 どう組めばいいか教えてください。 メニューバーの項目を選んだあとに出てくるメニューを選ぶと動作するプログラムは検索してすぐ出てくるのですが…。 下のプログラムはメニューバーのEndを押すと終了する、にならなかったプログラムです。 import java.awt.Container; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JFrame; import javax.swing.JMenu; import javax.swing.JMenuBar; class Test1 extends JFrame{ public static void main(String args[]){ Test1 frame = new Test1("タイトル"); frame.setVisible(true); } Test1(String title){ setTitle(title); setBounds(100, 100, 300, 250); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JMenuBar menubar = new JMenuBar(); JMenu menu1 = new JMenu("End"); menu1.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ System.exit(0); } }); menubar.add(menu1); setJMenuBar(menubar); Container contentPane = getContentPane(); } }

    • ベストアンサー
    • Java
  • 実行できません。

    import javax.swing.*; public class JFrame01 { public static void main(String[] args) { JFrame frame = new JFrame("JFrame01"); frame.setSize(400, 300); frame.setVisible(true); } }  このプログラムはどこかおかしいでしょうか。コンパイルはできるんですけど、実行することができません。  実行すると、 「Exception in thread "main" java.lang.NoClassDefFoundError: JFrame01」 というエラーが出ます。

    • ベストアンサー
    • Java
  • cadで作った図面をフレーム上で表示

    こんばんは いつもお世話になっています。 gif形式の図を表示することはできるのですが AutoCADで描いた図はgifファイルに出力できません。 下記のようにコーディングしたのですが、”ぜひお越しください”しか表示されませんでした。 ほかの形式(dxf、wfm、bmp)でもいろいろ試したのですができませんでした。 どうすればAutoCADで作った図をフレーム上に表示できるのでしょうか? どなたか教えていただけませんか? import java.awt.*; import javax.swing.*; import javax.swing.ImageIcon; class map { public static void main(String args[]) { JFrame frame=new JFrame("map test"); JPanel panel=new JPanel(); ImageIcon ico=new ImageIcon("地図.gif"); JButton button=new JButton("ぜひお越しください",ico); panel.add(button); Container ct=frame.getContentPane(); ct.add(panel); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.pack(); frame.setVisible(true); } }

  • Javaでパラパラアニメを作成するには、

    どうしたらいいのでしょうか。 初心者なのにイキナリ作ることになってしまいました。 5枚の絵をループでアニメーションさせたいのですが。 フレームを作るところまでは出来たのですが、その先がよく分かりません。どのようにして画像を読み込んで一定のタイミングではなくそれぞれの絵のタイミングでアニメさせればいいのでしょうか、お願い致します。 import java.awt.Insets; import javax.swing.JFrame; public class Animetion { static JFrame frame1; Animetion(){ frame1 = new JFrame("アニメ"); frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame1.setVisible(true); } public static void main(String[] args) { Animetion gtm = new Animetion(); //インスタンス Insets insets = frame1.getInsets(); frame1.setSize(600 + insets.left + insets.right,400 + insets.top + insets.bottom); } }

    • ベストアンサー
    • Java
  • JPanelで宣言したメソッドについて

    JPanelを継承したクラスで、引数をもらってその引数を表示するメソッドを作成します。そして別のJFrameを継承したクラスの中で、さきほど作成したメソッドを利用したいのですが、どうすればできるのでしょうか?そもそもこのやり方できちんと表示されるのでしょうか? ぜひともご教授のほど宜しくお願いします。 以下はプログラムになります。 import java.awt.*; import java.awt.event.*; import javax.swing.*; class Ptest extends JPanel { public void paintComponent(Graphics g) { super.paintComponent(g); g.drawString("よろしく", 50, 50); } public void draw(String s) { Graphics g = getGraphics(); g.drawString(s, 100, 100); } } class Ftest extends JFrame { JLabel jlb; public Ftest() { setSize(350, 300); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); Container c = getContentPane(); Ptest p = new Ptest(); p.draw("yoroshiku"); c.add(p); p.setLayout(null); jlb = new JLabel("frame"); p.add(jlb); jlb.setBounds(70, 70, 50, 50); } } public class Test1 { public static void main(String[] args) { JFrame w = new Ftest(); w.show(); } }

    • ベストアンサー
    • Java