Java 如何将子视图从其他类添加到框架中?
首先,我不是在寻找解决方案,我是在问什么是最可接受的方法。 现在我有了一个主框架,它有一个绘图JPanel和一对JScrollPane,用于记录东西。 我已将所有与日志相关的视图放在一个类中,并添加到主框架中,如下所示:Java 如何将子视图从其他类添加到框架中?,java,swing,view,hierarchy,conventions,Java,Swing,View,Hierarchy,Conventions,首先,我不是在寻找解决方案,我是在问什么是最可接受的方法。 现在我有了一个主框架,它有一个绘图JPanel和一对JScrollPane,用于记录东西。 我已将所有与日志相关的视图放在一个类中,并添加到主框架中,如下所示: logViews = new LogViews(this); 我认为我不应该将整个类添加到对象中,但是我如何才能使它工作呢?我应该扩展主框架还是制作一个接口? 日志视图也需要与主面板通信,因此必须双向连接 好的,如果不够清晰: LogViews是我定制的一个类,它看起来像这样
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);
}
}
公共类日志视图{
私有默认列表模型logModel;
私人JList日志列表;
公共日志视图(主机框架){
logModel=新的DefaultListModel();
logList=new JList();
logList.setModel(logModel);
JScrollPane logListScroll=新的JScrollPane(logList);
添加(logListScroll,BorderLayout.NORTH);
}
}
它可以工作,我只是想知道我是否可以不用在构造函数中添加大型机来完成它。您可以制作
LogViews
aJDialog
类似的东西
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();
}
}
允许它与大型机
进行“通信”的方法是将它作为一个内部类,这样它就可以访问大型机
的所有类成员。除此之外,很难提供完整的解决方案,因为我们已经提供了很多需要沟通的内容
如果希望它出现在
大型机中
,只需日志视图
aJPanel
并将该面板添加到大型机中
。同样,将其作为大型机的内部类
,这样它就可以访问大型机的所有字段
编辑 如果您想作为一个单独的类,您还可以做的是使用
setter
。像
public void setLogModel(DefaultListModel model) {
logList.setModel(model);
}
和/或从列表中添加和删除的两个方法
public void addToList(String element) {
logModel.addElement(element);
}
然后从大型机
调用这些方法。但是对于您的场景,我只需要将LogViews
aJPanel
,而不是JDialog
,并在main类中实例化它,然后将它添加到您的大型机中。差不多
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);
}
}
公共类日志视图扩展了JPanel
私有默认列表模型logModel;
私人JList日志列表;
公众日志视图(){
logModel=新的DefaultListModel();
logList=new JList();
logList.setModel(logModel);
JScrollPane logListScroll=新的JScrollPane(logList);
setLayout(新的BorderLayout());
添加(日志列表滚动);
}
公共void addToList(字符串元素){
logModel.addElement(元素);
}
public void setLogModel(DefaultListModel模型){
logList.setModel(model);
}
}
1)什么是自定义组件LogViews
?2) “一对JScrollPane只是用来记录东西的。”这到底是什么意思?它们的侧面有文本区域吗?3) 这个logViews=新的logViews(this)究竟是如何实现的代码>向我们显示您已将其添加到框架中?我添加了一个简单的示例,因此最终,LogView只是一个JList
我是否正确?关于你想用它做什么的问题到底是什么?还有,你想让这个类出现在大型机中还是作为一个单独的框架出现?我需要它在里面,这的全部目的是分离一些代码,因为主框架的类太长了。好吧,如果给它框架不是一个问题,会有用的,谢谢!
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);
}
}