我编写了一些代码,旨在创建一个表并在该表中显示剪贴板数据(将从 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
时...它包含正确TableModel
的Excel数据,包含在...中JTable
...但它不会显示...我正在扯掉我的头发为什么...
任何人都可以帮忙吗?