繁体   English   中英

JButton actionListener

[英]JButton actionListener

我编写了一个具有Button和JList的JFrame,当我点击Button时,将显示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,按钮声明为类成员

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

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

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

您不应该更改框架内的组件,而应考虑您的设计以及是否有必要这样做。

在您的情况下,唯一的影响是更改JList内的内容。 因此,您不应重建GUI,而应使用视图模型分离并仅更改模型内容。 您可以在如何使用列表 - 向列表中添加项目和从列表中删除项目中找到示例。

呼叫

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

这是因为,如果向框架添加组件,则调用repaint将使用该接口刷新底层结构。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM