如何将项目添加到netbeans中另一个类的列表框中

时间:2010-12-01 16:40:29

标签: java class netbeans listbox

我想在一个jframe的列表框中添加元素,来自不同的类但是无论我尝试什么它似乎都不起作用...我没有得到错误或任何关于什么错误的反馈这...但继承我的布局,列表框使用DefaultListModel lm2

我知道如何将元素添加到jframe类中的jList,但由于某种原因,即使在jframe类中添加元素,我也无法从其他类添加元素:

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

和我的“其他班级”

  frmMain doit = new frmMain();

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

更多细节add- --->

我有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.class

// 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 个答案:

答案 0 :(得分: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中的代码没有,请记住,您为ProcessReturnedInfo

的每次调用创建一个新的frmMain及其自己的listModel

如果您只想更新一个Frame,请尝试将该帧用作单例:

frmMain的构造函数从public更改为private并将其添加到类:

private static frmMain instance = null;

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

您现在必须使用new frmMain()中的frmMain.getInstance()RequestInfo

,而不是致电RS232Example

这就是你将永远在同一帧上工作的方式。

祝你好运。

答案 1 :(得分:0)

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

抱歉生病了一段时间,但我相信Andreas L对你的问题有正确的答案。您不一定需要静态框架对象,但这是最简单的方法。如果您正在处理多个线程,您可能仍然会遇到问题,在这种情况下,您将需要控制请求处理的方法,排队尚未完成处理的数据等。

祝你好运。