【发布时间】:2014-04-15 10:30:12
【问题描述】:
我正在做一个项目,遇到了一点逻辑错误,希望你们能解决这个问题。
我正在构建一个将显示 SQL 数据库(以及其他内容)的应用程序。目前,按照我的设置方式,我在容器 (BorderLayout.CENTER) 中有一个 JTabbedPane,这并不是说这真的是相关信息。
任何人,一旦用户连接到数据库(并最终选择要查看的“表”),我想添加一个选项卡。但是现在,只有一个表要显示。
因此,当用户点击“连接”时,理想情况下连接会成功,此时 JTable 会填充数据库信息。
一旦此表初始化并准备就绪,请将其添加到新的 JPanel,然后将该面板添加到 JTabbedPane。
这就是错误出现的地方。我“相信”到目前为止我的逻辑是正确的,并且我没有收到任何编译器/运行时错误,只是没有显示新选项卡(如果我点击它应该是)什么都没有发生。
以下是我的一些代码,如果有什么需要澄清的,请不要犹豫!
这是 Table_Builder 类代码(一旦它正常工作我会清理它!)
public class Table_Builder extends Framework
{
private DefaultTableModel updated_table_model;
private JTable updated_table;
private JScrollPane table;
public Table_Builder()
{
// no implemention needed
}
public Table_Builder(Vector rows, Vector columns)
{
updated_table_model = new DefaultTableModel(rows, columns);
updated_table = new JTable(updated_table_model);
updated_table.setCellSelectionEnabled(true);
updated_table.setFillsViewportHeight(false);
table = new JScrollPane(updated_table);
JPanel tab2 = new JPanel();
tab2.add(table);
tab2.setVisible(true);
center.add("Table Viewer", tab2);
// I'm thinking some sort of listener needs to be active, so it knows I'm adding a new
// tab, but I'm not sure how this actually works.
center.addPropertyChangeListener("foregroud", null);
center.repaint();
// center has already been added to container so i don't think that needs to be done again?
}
框架
protected void center_panel()
{
JPanel tab1 = new JPanel();
tab1.add(//emitted);
center.setPreferredSize(new Dimension(1340, 950));
center.setBackground(new Color(90, 90, 90));
center.addTab("Tab1", tab1);
container.add(center, BorderLayout.CENTER);
}
最好的问候, 迈克
更新:
Framework 具有我用来构建“Frame”的这些变量 框架为边框布局(东、西、北、南、中)
protected JTabbedPane center // this is the center panel
protected Container container // this will house all panels to be added
如上所示,我目前正在添加标签
1.) 创建一个新的 JPanel 2.)将(需要显示的内容)添加到jpanel 3.) 将该 jpanel 添加到 JTabbedPane
这是由
center.addTab("Tab name here", panel to be added);
这个的javadoc说
center.addTab("String title", Component component);
这按预期工作,我遇到的问题是这是在服务器连接之前完成的。用户连接到服务器后,我想添加一个新选项卡,该选项卡是从 Table_Builder 完成的,它继承自 Framework(这就是为什么中心和容器受到保护而不是私有的原因)。
【问题讨论】:
-
没有
"foregroud"属性。 -
发布一个简短的可运行程序来复制此问题。您的代码缺少一些重要的细节。
-
您在寻找什么详细信息?而且我相信根据javadoc有一个“前景”属性。不是说这是我需要的,但我只是在测试一些东西。
-
center.add("Table Viewer", tab2);看起来很不对劲。不能说,因为你的代码缺乏细节......比如什么是中心。遵循 peeskillet 的建议。 -
已添加更新,添加选项卡的语法正确(当前在应用程序启动时有效)我正在尝试在满足条件(服务器连接)后构建/添加一个,并且应用程序已经启动并运行。
标签: java swing user-interface jpanel jtabbedpane