我想在一个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上将表单设置为可见,但是我不能这样做,因为它将连续多次打开表单,因为这个类方法被多次从一个事件中调用。 。
答案 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
如果您只想更新一个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对你的问题有正确的答案。您不一定需要静态框架对象,但这是最简单的方法。如果您正在处理多个线程,您可能仍然会遇到问题,在这种情况下,您将需要控制请求处理的方法,排队尚未完成处理的数据等。
祝你好运。