Java JButton actionListener

Java JButton actionListener,java,swing,jbutton,actionlistener,Java,Swing,Jbutton,Actionlistener,我编程了一个带有按钮和JList的JFrame,当我单击按钮时,将显示JList列表。相反,它不会显示任何内容,除非我单击maximaze或刷新框架。 按钮侦听器类 class b0listener implements ActionListener{ @Override public void actionPerformed(ActionEvent e) { // TODO Auto-ge

我编程了一个带有按钮和JList的JFrame,当我单击按钮时,将显示JList列表。相反,它不会显示任何内容,除非我单击maximaze或刷新框架。 按钮侦听器类

class b0listener implements ActionListener{

                @Override
                public void actionPerformed(ActionEvent e) {
                    // TODO Auto-generated method stub
                    MessageList.removeAll();    
                    Messages = new JList(lireRepertoire("C:/Documents and Settings/Java/eclipse data file"));


                    Pane =new JScrollPane(Messages);
                    Pane.setPreferredSize(new Dimension(400,400));
                    //Messages.setMaximumSize(MessageList.getPreferredSize()) ;
                    MessageList.add( Pane);

                }}
类构造函数代码

Fframe.setTitle("Boite Message");
        Fframe.setSize(800,300);
        Fframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        Fframe.setVisible(true);    
        //  panels Layout 

        ButtonMenu.setLayout(new BoxLayout(ButtonMenu, BoxLayout.Y_AXIS));//Jpanel
        MessageList.setLayout(new FlowLayout());//JPanel
        ButtonMenu.setBackground(Color.LIGHT_GRAY);
        MessageList.setBackground(Color.orange);
        MessageList.setPreferredSize(new Dimension(400, 400));

                Fframe.add(ButtonMenu,BorderLayout.WEST);
        Fframe.add(MessageList,BorderLayout.CENTER);
        ButtonMenu.add(b0);
                b0.addActionListener(new b0listener());
                 Pane =new JScrollPane(Messages);
        Messages.setPreferredSize(new Dimension(800,250));
        //Pane.setMaximumSize(MessageList.getSize()) ;
        MessageList.add( Pane);
我已经将Jpanels和Jframe按钮声明为类成员调用

// Add the component againt to appear in the interface.
Fframe.add(MessageList,BorderLayout.CENTER);
Frame.repaint();

这是因为,如果将组件添加到框架中,调用repaint将刷新接口的底层结构。

首先,学习如何使用正确的Java命名约定。变量不应以大写字符开头

从面板中动态添加/删除组件时,需要重新验证()面板:

messageList.add( pane); 
messageList.revalidate();
messageList.repaint();

与其改变框架内的组件,不如考虑一下你的设计,如果真的有必要的话


在您的情况下,唯一的效果是更改
JList
中的内容。因此,不应重建GUI,而应使用视图-模型分离,仅更改模型内容。您可以在中找到一个示例。

可能缺少分号。如果你不告诉我们你是怎么做的,我们怎么知道呢。请发布一个SSCCE。可能尝试在执行的
操作的结尾处重新绘制(
)。顺便说一下,在Java:Pane->Pane中,永远不要以大写字母开头变量名。大写代表类名。它没有强制执行;这只是一个惯例,为每个动作监听器增加一个额外的类是不常见的。假设你有15个按钮。您会创建另外15个实现ActionListener的类吗?查看Java教程中的应用程序,这些应用程序执行与您需要的类似的操作,并尝试遵守这些标准。此外,类名最好以大写字母开头。@Costis-当然,如果15个按钮在做不同的事情:这就是OO的意义所在。但是使用Action而不是ActionListener我在listener类的末尾添加了它,并且它只从MessageList面板中删除Jlist,u plz可以按照约定更改命名。它在低估哪一个是类,哪一个是变量的同时造成了混乱!调用actionlistener后再次添加messageList组件(我也编辑了答案)。最好的答案通常不是对原始问题的直接回答,而是原始问题的解决方案