【发布时间】:2014-10-14 14:59:09
【问题描述】:
在我的主类中初始化 JTabbedpane 时一切正常,但为了不一遍又一遍地重复相同的代码,我想将初始化部分移动到单独的类中,这样我就可以轻松创建新选项卡而不生成相同的再次编码。 不幸的是,在将代码移动到单独的类之后,JTabbedpane 没有正确创建,因为添加到列表中的项目没有显示。看起来 JPanel 没有加载,因为选项卡下的屏幕是灰色的(当它工作时它是白色的)。
下面是有效的代码:
private void initialize() {
frmLoganalyzer = new JFrame();
frmLoganalyzer.setTitle("LogAnalyzer");
frmLoganalyzer.setBounds(100, 100, 450, 300);
frmLoganalyzer.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frmLoganalyzer.setExtendedState(frmLoganalyzer.getExtendedState() | JFrame.MAXIMIZED_BOTH);
JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.TOP);
frmLoganalyzer.getContentPane().add(tabbedPane, BorderLayout.CENTER);
JPanel systemLogTab = new JPanel();
tabbedPane.addTab("System Log", null, systemLogTab, null);
DefaultListModel listModel = new DefaultListModel<LogSystem>();
systemLogTab.setLayout(new BorderLayout(0, 0));
JList list = new JList(listModel);
list.setCellRenderer(new CustomListCellRenderer());
list.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
list.setLayoutOrientation(JList.VERTICAL);
list.setVisibleRowCount(-1);
JScrollPane listScroller = new JScrollPane(list);
listScroller.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
listScroller.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
systemLogTab.add(listScroller);
}
我试着把它移动成这样:
private void initialize() {
frmLoganalyzer = new JFrame();
frmLoganalyzer.setTitle("LogAnalyzer");
frmLoganalyzer.setBounds(100, 100, 450, 300);
frmLoganalyzer.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frmLoganalyzer.setExtendedState(frmLoganalyzer.getExtendedState() | JFrame.MAXIMIZED_BOTH);
JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.TOP);
frmLoganalyzer.getContentPane().add(tabbedPane, BorderLayout.CENTER);
TabManager tabManager = new TabManager(tabbedPane);
DefaultListModel listModel = new DefaultListModel<LogSystem>();
tabManager.addTab("System Log", null, listModel);
}
并且在用于初始化选项卡的类中:
public void addTab(String tabName, Icon icon, DefaultListModel<LogSystem> listModel) {
JPanel systemLogTab = new JPanel();
tabbedPane.addTab(tabName, null, systemLogTab, null);
systemLogTab.setLayout(new BorderLayout(0, 0));
JList<LogSystem> list = new JList(listModel);
list.setCellRenderer(new CustomListCellRenderer());
list.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
list.setLayoutOrientation(JList.VERTICAL);
list.setVisibleRowCount(-1);
JScrollPane listScroller = new JScrollPane(list);
listScroller.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
listScroller.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
systemLogTab.add(listScroller);
}
我做错了什么?
【问题讨论】:
-
您的代码无法编译,请删除不需要的部分。在发布之前始终将您的代码复制粘贴到您的 IDE 中,以验证我们可以自己运行它。
标签: java swing jtabbedpane