Java 如何从netbeans中的另一个类向列表框添加项
我想添加元素到jframe上的列表框中,来自不同的类,但是无论我尝试什么,它似乎都不起作用。。。我没有得到任何错误或任何反馈,这是什么问题。。。但这是我的布局,列表框使用的是DefaultListModelLM2 我知道如何将元素添加到jframe类中的jList中,但由于某些原因,即使在jframe类中添加元素,我也无法从另一个类中添加元素:Java 如何从netbeans中的另一个类向列表框添加项,java,class,netbeans,listbox,Java,Class,Netbeans,Listbox,我想添加元素到jframe上的列表框中,来自不同的类,但是无论我尝试什么,它似乎都不起作用。。。我没有得到任何错误或任何反馈,这是什么问题。。。但这是我的布局,列表框使用的是DefaultListModelLM2 我知道如何将元素添加到jframe类中的jList中,但由于某些原因,即使在jframe类中添加元素,我也无法从另一个类中添加元素: public void log(String str) { lm2.addElement(str); } 在我的“另一节课”上
public void log(String str) {
lm2.addElement(str);
}
在我的“另一节课”上
#
更多详细信息添加---->
#
我有3门课,它们都是:
初级
// 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上将表单设置为可见,但是我不能这样做,因为它会连续多次打开表单,因为该类方法会从事件中多次调用 你的另一门课是什么?我假设
frmMain()
创建了一个JFrame
,其中包含JList
,但除非JFrame
也可见,否则您将看不到它。我怀疑—我可能错了—您有一个以上的JFrame
实例,并且字符串被添加到一个不可见的实例中
对不起,我病了一会儿,但我相信安德烈亚斯我对你的问题有正确的答案。您不一定需要静态帧对象,但这是最简单的方法。如果您正在处理多个线程,那么您可能仍然会遇到问题,在这种情况下,您将需要一些方法来控制对请求的处理、对尚未完成处理的数据进行排队等
祝你好运。如果你的列表框模型设置正确(比如
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,并使用它自己的列表模型
如果只想更新一个帧,请尝试将该帧用作单帧:
将frmMain
的构造函数从public更改为private,并将其添加到类中:
private static frmMain instance = null;
public static frmMain getInstance() {
if (instance == null) {
instance = new frmMain();
}
return instance;
}
您现在必须在RequestInfo
和RS232Example
这就是你总是在同一个框架上工作的方式
祝你好运。什么是“列表框”?提问时使用恰当的术语。如果在第二个类中有对ListModel的引用,那么addElement()方法应该可以工作。张贴您的SSCCE()演示问题。您发布的代码对我们没有任何帮助。这个问题通常是由于一个引用引起的,即您调用方法来更改数据的组件不是屏幕上显示的组件。我看到在你的“其他类”中,你调用new frmMain()--是我们在可视化的变量上面看到的doit frmMain变量,你调用setVisible(true)(如果它是JFrame)?否则,我支持Rob Camick在上面推荐的所有内容。出于某种原因,无论我尝试什么,我都可以在RequestInfo.class中再次引用DefaultListModel。。。我怎样才能从这个类中添加元素?我明白你的意思,我应该在RequestInfo.class中将“form”设置为可见,但是我不能这样做,因为该方法通过事件处理程序被调用多次。这是一个RS232项目(串行通信数据),所以数据不断输入,并不断在RequestInfo.class中调用此方法。
private static frmMain instance = null;
public static frmMain getInstance() {
if (instance == null) {
instance = new frmMain();
}
return instance;
}