我已经写了一些代码,旨在创建一个表,并在该表中显示剪贴板数据(这将从excel中复制)。
因此,我在菜单栏“从excel导入”中有一个菜单项,当单击它时,它将获取剪贴板中的任何excel数据,并在下面的面板中显示一个表。
另外,我编写它的目的是为了让面板(在其中显示表格)能够根据任何未来的菜单按钮进行切换,这可能会导致下面显示一个完全不同的面板。
所以我有这个DisplayExcelData类,它实现了一个MainPage接口(它包含一个init方法)。当单击菜单项时,它在扩展的menubar类中激发一个操作事件,该事件向内容窗格提供与该菜单项相关联的MainPage界面(在本例中,当单击“从DisplayExcelData导入”时,将其提供给内容窗格),然后调用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类作为初始屏幕,它works...it采取的excel数据在剪贴板上,并显示在表中的screen...if然而,我坚持这个表显示时,我点击的MenuItem,它只是显示一个空白屏幕。当我调试时,检查mainPanel在it...it中有什么包含正确的TableModel和Excel数据,包含在它不会显示的JTable...but中...我正在绞尽脑汁地解释为什么……
有人能帮上忙吗?
发布于 2012-10-21 03:08:42
JFrame类ActionListener (除非ActionListener必须可以被其他类访问)至于你的实际问题:
在删除组件并添加新组件后,尝试在JFrame实例上调用revalidate()和repaint():
contentPane.removeAll();//remove
setPanelFromMenuBar();//add
revalidate();//refresh ui and layout
repaint();或者也可以看看CardLayout,它允许通过CardLayout#show(...)在JComponent和JPanel之间进行切换
发布于 2012-11-13 19:18:25
我遇到的问题是我已经实现了TableModel,但是没有触发任何表更改的方法。我编写了这些方法,并在最后重新验证了表,并使其再次工作。谢谢你的帮助。
https://stackoverflow.com/questions/12989388
复制相似问题