Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Апплеты > Добавление компонентов при возникновении события


Автор: Nestor 19.5.2007, 17:38
Здравствуте! Такая проблема. 
В апплете находится счетчик (JSpinnner), кнопка. При нажатии кнопки апплет должен обработать значение, находящееся в счетчике и создать что-то типа матрицы из экземпляров JTextField. То есть при нажатии кнопки старая панель с текстовыми полями удаляется и создается новая, куда и помещаются новые поля. Но новосозданная панель не отображается. Я запускал в Eclipse, после нажатии кнопки удаляется панель, а при изменении размеров окошка (созданное Эклипсом) появляется панель с правильным количеством текстовых полей. Но почему же новая панель не отображается сразу? Вот это я запускал:
.
Код


import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Ex extends JApplet{

    JPanel panel3; JPanel panel2; JSpinner spinner; JTextField[][] jTF;Container c;
    int count = 0;
    public void init(){
        
        c = getContentPane();
        c.setLayout(new BorderLayout());
        JPanel panel = new JPanel(new FlowLayout(FlowLayout.LEFT));
        panel2 = new JPanel(new FlowLayout());
        

        spinner = new JSpinner(new SpinnerNumberModel(1,1,5,1));
    
        JButton pusk = new JButton("ПУСК");
        pusk.addActionListener(new ActionListener(){

            public void actionPerformed(ActionEvent arg0) {
                
                count++;
                if(count!=1)
                    panel2.remove(panel3);
                
                int x = (Integer)spinner.getValue();
                panel3 = new JPanel( new GridLayout(x,x));
                panel3.setPreferredSize(new Dimension(x*100,x*50));
                jTF = new JTextField[x][x];

                for(int i =0; i<x;i++){
                    for(int j = 0; j < x; j++)
                        jTF[i][j] = new JTextField(5);
                }

                for(int i =0; i<x;i++){
                    for(int j = 0; j < x; j++)
                        panel3.add(jTF[i][j]);
                }    
                
                panel2.add(panel3);
            }
            
        });
        
        panel.add(spinner);
        panel.add(pusk);
        c.add(panel2);
        c.add(panel, BorderLayout.NORTH);

    }
}


Буду благодарен за помощь. А то времени совсем мало.

Автор: powerOn 19.5.2007, 21:19
вызови validate() для контейнера на который добавляешь свои компонент.

Автор: Nestor 19.5.2007, 21:41
powerOn, 
Огромнейшее спасибо!

Автор: powerOn 19.5.2007, 22:13
незачто. smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)