JButton actionListener - PullRequest
       7

JButton actionListener

2 голосов
/ 09 сентября 2011

Я запрограммировал JFrame, который имеет Button и JList, и когда я нажимаю на Button, отображается список JList. Вместо этого он ничего не показывает, пока я не нажму на максимизацию или не обновлю кадр. Класс слушателя кнопки

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, кнопку в качестве участников класса

Ответы [ 3 ]

4 голосов
/ 09 сентября 2011

Прежде всего, научитесь использовать правильные соглашения об именах Java.Переменные не должны начинаться с символа в верхнем регистре.

При динамическом добавлении / удалении компонентов с панели необходимо выполнить повторную проверку () панели:

messageList.add( pane); 
messageList.revalidate();
messageList.repaint();
4 голосов
/ 09 сентября 2011

Вместо того, чтобы менять компоненты внутри вашего каркаса, вы должны подумать о своем дизайне и о том, действительно ли это необходимо.

В вашем случае единственным эффектом является изменение содержимого внутри JList. Поэтому вам не следует перестраивать графический интерфейс, а вместо этого использовать разделение модели представления и изменять только содержимое модели. Вы можете найти пример в Как использовать списки - добавление элементов в список и удаление элементов из списка .

1 голос
/ 09 сентября 2011

Вызов

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

Это потому, что если вы добавляете компоненты во фрейм, вызов перерисовки обновит базовую структуру с помощью интерфейса.

...