2010-12-01 79 views
0

我想添加元素到jframe上的列表框,从不同的类,但它似乎并不工作,无论我尝试...我没有得到一个错误或对这个错误有什么反馈...但是继承人布局我有,列表框使用DefaultListModel lm2如何将项目添加到另一个类的netbeans列表框

我知道如何添加元素到jframe类的jList,但为由于某种原因,我无法添加从另一个类JFrame类里面添加这个即使elments:

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

和对我的“其他类”

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

 // 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); 

    } 

    } 

我明白,也许我需要设置窗体上可见RequestInfo.class,但我不能这样做,因为它会不断的形式多次打开,因为这个类方法被称为事件的多次...

+2

什么是“列表框”?询问问题时使用适当的terminoligy。如果您在第二个类中有对ListModel的引用,那么addElement()方法应该可以工作。发布你的SSCCE(http://sscce.org)来证明问题。您发布的代码根本无法帮助我们。 – camickr 2010-12-01 16:48:31

+0

通常,这个问题是由于其中一个引用引起的,您调用方法来更改数据的组件不是在屏幕上可视化的组件。我发现在你的“其他类”中调用新的frmMain() - 是我们在可视化之上看到的doit frmMain变量,你打开setVisible(true)(如果它是JFrame)?否则,我将继续推荐Rob Camick。 – 2010-12-01 16:54:44

回答

2

如果你的列表框模型设置正确(如listBox.setModel(this.lm2);) 我想下面应该工作:

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

如果你想知道为什么这个工程并在RequestInfo代码不,要记住,你使用它创建自己的ListModel新frmMain为ProcessReturnedInfo

每一个电话。如果你想只有一个框架更新尝试使用帧作为单:

变化的frmMain从公众到私人的构造和它添加到类:

private static frmMain instance = null; 

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

与其说new frmMain()你现在必须使用的frmMain.getInstance()RequestInfoRS232Example

那怎么你总是会在同一框架上运行。

祝你好运。

0

你的其他课程是什么?我假设frmMain()创建了一个JFrame,其中有一个JList,但除非JFrame也可见,否则您将看不到它。我怀疑 - 我可能是错的 - 你有多个JFrame的实例,并且字符串被添加到一个不可见的字符串中。

对不起生病了一阵子,但我相信安德烈亚斯L对你的问题有正确的答案。您不一定需要静态框架对象,但它是最简单的方法。如果您正在处理多个线程,则您可能仍然遇到问题,在这种情况下,您将需要方法来控制请求的处理,排队处理尚未完成处理的数据等。

祝您好运。

相关问题