Closed. This question needs details or clarity。它当前不接受答案。
想改善这个问题吗?添加详细信息并通过editing this post阐明问题。
6年前关闭。
Improve this question
首先,我不是在寻找解决方案,而是在问什么是最可接受的方法。
现在,我有一个主框架,其中有一个绘图JPanel和几个JScrollPane,用于记录事物。
我将所有与日志相关的视图放在一个类中,并添加到主框架中,如下所示:
我认为我不应该将整个类添加到对象中,但是我还能如何使其工作呢?我应该扩展主机架还是建立接口?
日志视图也需要与主面板进行通信,因此必须以两种方式进行连接。
好吧,如果它还不够清楚:
LogViews是我制作的一个自定义类,它看起来像这样,但是有更多的JLists:
它有效,我只是想知道是否可以在不向构造函数添加MainFrame的情况下做到这一点。
您可以单击按钮使其打开
您可以做的就是允许它与
如果希望它显示在
编辑
如果要作为一个单独的类,还可以做一个
和/或几种方法可以从列表中添加和删除
然后只需从
想改善这个问题吗?添加详细信息并通过editing this post阐明问题。
6年前关闭。
Improve this question
首先,我不是在寻找解决方案,而是在问什么是最可接受的方法。
现在,我有一个主框架,其中有一个绘图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的情况下做到这一点。
最佳答案
您可以将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
“通信”,只是使它作为内部类,这样它就可以访问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
中。就像是public class LogViews extends JPanel
private DefaultListModel logModel;
private JList<String> logList;
public LogViews(){
logModel = new DefaultListModel();
logList = new JList();
logList.setModel(logModel);
JScrollPane logListScroll = new JScrollPane(logList);
setLayout(new BorderLayout());
add(logListScroll);
}
public void addToList(String element) {
logModel.addElement(element);
}
public void setLogModel(DefaultListModel model) {
logList.setModel(model);
}
}
关于java - 如何将 subview 添加到其他类的框架? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21115187/
10-09 04:12