通过侦听器从网格面板更新组件

Posted

技术标签:

【中文标题】通过侦听器从网格面板更新组件【英文标题】:Update a component from a grid panel through a Listener 【发布时间】:2013-06-04 02:16:09 【问题描述】:

如何通过 Listener 从网格面板更新组件?

我有以下问题: 我用这种方式创建了一个网格表

public class gui 

JPanel gridPanel = new JPanel();
JPanel background = new JPanel();
JLayeredPane layeredPanel = new JLayeredPane();
...

public gui
...
for(int i=0; i<2; i++)
            JPanel panel= new JPanel(new BorderLayout());
            panel.setOpaque(false);
            gridPanel.add(panel);
            


gridPanel.setOpaque(false);
layered.add(background,new Integer(1));
layered.add(gridPanel, new Integer(2));

JButton piece = new JButton( new ImageIcon("an image"));
JPanel panel = (JPanel)gridPanel.getComponent(0);
panel.add(piece);
...

好的,这很好用,但我想向 JButton 添加一个允许更新 gridPanel 的动作侦听器,我想在我的 GUI 构建器中添加它:

piece.addActionListener(new Listener(this));

我这样新建了一个ActionListener类:

public class Listener implements ActionListener
private gui gui1;
public movimentoListener(gui gui1)
    gui1=gui;       

public void actionPerformed(ActionEvent e)
    JButton piece = new JButton( new ImageIcon("an other image"));
            JPanel panel = (JPanel)getGridPanel().getComponent(1); //obviously I've created getGridPanel
            panel.add(piece);
            gui.getGridPanel().repaint()


我想当我按下按钮时我的actionPerformed 用新图像更改我的gridPanel 的组件 1 但此代码不起作用,我尝试在网络上搜索但我没有找到解决方案.

【问题讨论】:

别这样,也许有人.... 您使用变量 gui 两次 - 但它在任何地方都没有声明(只是 gui1)。注意:类名使用大写,变量/字段使用小写。 是编译时错误还是运行时异常? 另见GridButtonPanel 是的,我在这段代码中声明了 gui1 和使用 gui,但这只是一个错字,因为我重命名了原始变量,但我的代码是正确的;)是的,有一个运行时异常“NullPointerException” JPanel panel = (JPanel)getGridPanel().getComponent(1) 但我不明白为什么... 【参考方案1】:

看看这些线程:

CardLayout display Next panel - java Swing

java swing dynamically adding components

希望对你有所帮助。

【讨论】:

以上是关于通过侦听器从网格面板更新组件的主要内容,如果未能解决你的问题,请参考以下文章

Ext JS 网格面板事件

如何使网格叠加中的所有图像齐平?

在树形面板中双击应该在网格面板中添加 Extjs

包含链接的 ExtJs 网格面板返回 false

通过 Ajax 更新 JSF 组件后,JavaScript/jQuery 事件侦听器不起作用

Ext js - 将网格值传递到下面的选项卡/网格面板