首先,我不是在寻找解决方案,我在问这个最可接受的方法是什么。 现在我有一个主框架,它有一个绘图JPanel和一对JScrollPane只是用于记录事物。 我已将所有与日志相关的视图放在一个类中,并添加到主框架中,如下所示:
logViews = new LogViews(this);
我认为我不应该将整个类添加到对象中,但我还能如何使其工作?我应该扩展主框架还是制作界面? 日志视图也需要与主面板通信,因此必须双向连接。
好吧,如果它不够清楚:
LogViews是我制作的一个自定义类,它看起来像这样,但有更多的JLists:
public class LogViews {
private DefaultListModel logModel;
private JList<String> logList;
public LogViews(MainFrame frame){
logModel = new DefaultListModel();
logList = new JList();
logList.setModel(logModel);
JScrollPane logListScroll = new JScrollPane(logList);
frame.add(logListScroll, BorderLayout.NORTH);
}
}
它有效,我只是想知道如果不在构造函数中添加MainFrame就能做到。
答案 0 :(得分:1)
您可以LogViews
JDialog
这样的事情
public class LogViews extends JDialog {
private DefaultListModel logModel;
private JList<String> logList;
public LogViews(JFrame frame, boolean modal){
super(frame, true);
logModel = new DefaultListModel();
logList = new JList();
logList.setModel(logModel);
JScrollPane logListScroll = new JScrollPane(logList);
setLayout(new BorderLayout());
add(logListScroll);
pack();
}
}
只需点击一下按钮即可打开
button.addActionListener(new ActionPerformed(ActionEvent e){
@Override
public void actionPerformed(ActionEvent e) {
new LogViews(MainFrame.this, true);
}
}
允许它与MainFrame
“通信”的做法只是让它作为内部类,以便它可以访问{{的所有类成员1}}。除此之外,很难提供完整的解决方案,因为它提供了很多需要传达的信息。
如果您希望它显示在MainFrame
中,您只需MainFrame
LogViews
并将该面板添加到JPanel
。再次,将其作为MainFrame
的内部类,以便它可以访问MainFrame
的所有字段
修改强>
如果你想要的是一个单独的类,你也可以做的是MainFrame
。像
setter
和/或从列表中添加和删除的几种方法
public void setLogModel(DefaultListModel model) {
logList.setModel(model);
}
然后从public void addToList(String element) {
logModel.addElement(element);
}
调用这些方法。但是对于您的方案,我只需将MainFrame
设为LogViews
而不是JPanel
,并在JDialog
中对其进行实例化,然后将其添加到MainClass
}。像
MainFrame