gpt4 book ai didi

java - 如何将 subview 添加到其他类的框架中?

转载 作者:行者123 更新时间:2023-12-01 13:37:58 25 4
gpt4 key购买 nike

首先,我不是在寻找解决方案,我是在问最可接受的方法是什么。现在我有一个主框架,其中有一个绘图 JPanel 和几个用于记录内容的 JScrollPane。我已将所有与日志相关的 View 放入一个类中,并添加到主框架中,如下所示:

logViews = new LogViews(this);

我认为我不应该将整个类添加到对象中,但是我还能如何使其工作?我应该扩展主框架还是做一个接口(interface)?日志 View 也需要与主面板通信,因此必须双向连接。

好吧,如果还不够清楚:

LogViews是我制作的自定义类,它看起来像这样,但有更多的JList:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com