我编写了一些代码,用于创建表格并在该表格中显示剪贴板数据(将从excel中复制)。
所以我在菜单栏“从Excel导入”中有一个菜单项,点击它时将获取剪贴板中的任何Excel数据并在下面的面板中显示一个表。
另外,我已经写好了,以便面板(显示表格)能够根据以后的菜单按钮进行切换,这可能会导致下面显示完全不同的面板。
所以我有这个DisplayExcelData
类实现了一个MainPage
接口(包含一个init方法)。单击菜单项时,它会在扩展的菜单栏类中触发一个操作事件,该类向内容窗格提供与该菜单项关联的MainPage
接口(在这种情况下,DisplayExcelData
被提供给内容窗格当“单击从Excel导入”时,将调用init并将其添加到内容窗格中。
当程序启动并且未选择任何内容时,它默认为InitialScreen
类。
DisplayExcelData类如下所示:
public class DisplayExcelData implements MainPageIF
{
private ExcelTableModel tm = null;
private Table table = new Table();
private JPanel thisPanel = new Panel();
public DisplayExcelData ()
{
super();
thisPanel.setLayout(new BorderLayout());
}
@Override
public void init()
{
//the test data I have been using is only 2 columns, so I'm just using
//these as test columns at the moment
tm = new ExcelTableModel("First, Second");
table.setModel(tm);
thisPanel.add(table, BorderLayout.CENTER);
}
@Override
public JPanel getPanel()
{
return thisPanel;
}
}
ExcelTableModel获取剪贴板中的数据并将其转换为TableModel
然后,在contentPane中,我有
public MainFrame()
{
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(50, 50, 800, 500);
compInit();
}
private void compInit()
{
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
contentPane.setLayout(new BorderLayout(0, 0));
contentPane.setBackground(new Color(0,0,0));
setContentPane(contentPane);
//mf is the menu bar which is a class variable
MenuBar menuBar = mf.getMenuBar();
setPanelFromMenuBar();
setMenuBar(menuBar);
}
private void setPanelFromMenuBar()
{
MainPageIF page = mf.getPage();
if (page == null)
{
page = new InitialScreen();
}
page.init();
//mainPanel is a class variable
mainPanel = page.getPanel();
mainPanel.setVisible(true);
contentPane.add(mainPanel, BorderLayout.CENTER);
}
@Override
public void actionPerformed(ActionEvent evt)
{
Object source = evt.getSource();
if (source instanceof MenuItem)
{
contentPane.removeAll();
setPanelFromMenuBar();
getContentPane().doLayout();
update(getGraphics());
}
}
如果我更改代码,那么我使用DisplayExcelData
类作为初始屏幕启动程序,它可以工作......它将剪贴板中的excel数据显示在屏幕上的表格中。 ..但是,我坚持在点击MenuItem
时显示此表格,它只显示一个空白屏幕。当我调试并检查mainPanel
中包含的内容时...它包含带有Excel数据的正确TableModel
,包含在JTable
中......但它不会显示...为什么......我正在撕开我的头发......
有人可以帮忙吗?
答案 0 :(得分:4)
JFrame
类ActionListener
(除非ActionListener
必须可由其他类访问)至于你的实际问题:
在删除组件并添加新组件后,尝试在revalidate()
实例上调用repaint()
和JFrame
:
contentPane.removeAll();//remove
setPanelFromMenuBar();//add
revalidate();//refresh ui and layout
repaint();
或者,请查看CardLayout,该CardLayout#show(...)
允许JComponent
通过{{3}}
JPanel
之间的{{1}}
答案 1 :(得分:0)
我遇到的问题是我已经实现了TableModel,但没有触发任何表更改方法。我写了这些方法并在最后重新验证了表,并让它再次运行。谢谢你的帮助。