gpt4 book ai didi

java - 使用 MenuBar 切换面板

转载 作者:行者123 更新时间:2023-11-29 03:41:21 25 4
gpt4 key购买 nike

我编写了一些代码,旨在创建一个表格并在该表格中显示剪贴板数据(将从 excel 复制)。

所以我在菜单栏“从 Excel 导入”中有一个菜单项,单击它时将获取剪贴板中的任何 excel 数据并在下面的面板中显示一个表格。

此外,我编写它以便面板(其中显示表格)能够根据任何 future 的菜单按钮进行切换,这可能导致下面显示完全不同的面板。

所以我有这个 DisplayExcelData 类,它实现了一个 MainPage 接口(interface)(它包含一个 init 方法)。单击菜单项时,它会在扩展菜单栏类中触发一个 Action 事件,该事件将内容 Pane 提供给与该菜单项关联的 MainPage 界面(在本例中为 DisplayExcelData当“单击从 Excel 导入”时被馈送到内容 Pane ),然后调用 init 并将其添加到内容 Pane 。

当程序启动且未选择任何内容时,它默认为 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 中。 ..但它不会显示...我正在撕扯我的头发为什么...

有人能帮忙吗?

最佳答案

至于你的实际问题:

在删除组件并添加新组件后,尝试在 JFrame 实例上调用 revalidate()repaint():

 contentPane.removeAll();//remove
setPanelFromMenuBar();//add

revalidate();//refresh ui and layout
repaint();

或者查看 CardLayout它允许通过 CardLayout#show(...)JComponent 之间切换,例如 JPanel

关于java - 使用 MenuBar 切换面板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12989388/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com