2010-12-01 7 views
0

jframeのリストボックスに要素を追加したいのですが、別のクラスから要素を追加したいと思っています...私はエラーや何がこれに間違って何かのフィードバックを得ることはありません...しかし、私が持っているレイアウトをheres、リストボックスDefaultListModel lm2を使用していますnetbeansの別のクラスのリストボックスに項目を追加する方法

私はjframeクラスのjListに要素を追加する方法を知っています

public void log(String str) { 
     lm2.addElement(str); 
    } 

と私の「他のクラス」

に:私はJFrameのクラス内でこれを追加することも、別のクラスからelmentsを追加することができませんいくつかの理由
frmMain doit = new frmMain(); 

    doit.log("add to list box"); 

詳細は、私は3つのクラスがあり、ここで、それらすべてがある--->

をアドオン:

frmMain.class

// jFrame class which builds the jframe (from jframe template) 
    public class frmMain extends javax.swing.JFrame { 

     /** Creates new form frmMain */ 
     public frmMain() { 
      initComponents(); 
     } 



     public void log(String str) { 
      lm2.addElement(str); 
     } 



     public DefaultListModel lm2 = new DefaultListModel(); 
    } 

RequestInfoを。クラス

// RequestInfo.class, which is trying to add an item to the 
// jlist but it doesn't add anything or error 

public class RequestInfo { 

    public void ProcessReturnedInfo(String sData, boolean bWithLabel) { 


      frmMain fm = new frmMain(); 
      fm.log("test test"); 



} 

RS232Example.class私はそれが継続的にこのクラスのメソッドので、フォームを複数回開かれますので、しかし、私はこれを行うことはできません、RequestInfo.classに見えるにフォームを設定する必要が多分理解

 // My main class which sets the jFrame to visible 
    public class RS232Example { 
     public static void main(String[] args) throws Exception { 


     frmMain form = new frmMain(); 
     form.setVisible(true); 

    } 

    } 

イベントから複数回呼び出されます...

+2

"リストボックス"とは何ですか?質問するときは、適切なターミナルを使用してください。 2番目のクラスのListModelへの参照がある場合は、addElement()メソッドが機能するはずです。問題を示すSSCCE(http://sscce.org)を投稿してください。あなたが掲示したコードは私たちを全く助けません。 – camickr

+0

多くの場合、この問題は、データを変更するためにメソッドを呼び出すコンポーネントが画面上で視覚化されていないという参考文献の1つに起因します。私はあなたの "他のクラス"であなたが新しいfrmMain()と呼ぶことを見ています - それは視覚化されているものの上にあるdoit frmMain変数です、setVisible(true)を(JFrameなら)さもなければ、私はロブ・カミックが上で推薦しているすべての2番目のものです –

+0

何らかの理由で私は何を試しても、私はRequestInfo.class内でDefaultListModelを再度参照することができます...どのようにこのクラスから要素を追加できますか? – jason

答えて

2

あなたはlistBoxモデル権が設定されている場合(のようなlistBox.setModel(this.lm2);) 私は次のように動作する必要がありますね:

public static void main(String[] args) throws Exception { 
    frmMain form = new frmMain(); 
    form.setVisible(true); 
    form.log("Hallo"); 
} 

この作品とRequestInfoを内のコードは、心に留めておくいない理由を不思議に思っている場合は、

変更:あなただけの1つのフレームにシングルトンとしてフレームを使用するように更新試しているしたい場合は、ProcessReturnedInfo

のすべての呼び出しのためにそれ自身のListModelで新しいfrmMainを作成すること民間への市民からfrmMainのコンストラクタとクラスにこれを追加します。

private static frmMain instance = null; 

public static frmMain getInstance() { 
    if (instance == null) { 
    instance = new frmMain(); 
    } 
    return instance; 
} 

の代わりにあなたが今、あなたが常に同じフレーム上で動作する方法ですRequestInfofrmMain.getInstance()RS232Example

を使用する必要がありますnew frmMain()を呼び出します。

Good Luck。

0

あなたの他のクラスは何ですか?私はfrmMain()JListJFrameを作成すると仮定していますが、JFrameも表示されていなければ表示されません。私はあなたがJFrameの複数のインスタンスを持っており、その文字列が表示されていないものに追加されていると思われます。

申し訳ありませんが、私はAndreas Lがあなたの問題に対する正しい答えを持っていると信じています。静的フレームオブジェクトは必ずしも必要ではありませんが、最も簡単な方法です。また、複数のスレッドを処理している場合には、依頼の処理を制御する方法、処理が完了していないキューイングのデータなどが必要になることもあります。

幸いです。

+0

私はあなたが言っていることを理解していますが、私はRequestInfo.classで可視になるように "フォーム"を設定する必要があります。しかし、このメソッドはイベントハンドラを介して複数回呼び出されるため、できません。これはRS232プロジェクト(シリアル通信データ)なので、データが常に入ってくるので、RequestInfo.classでこのメソッドを常に呼び出します。 – jason

関連する問題