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


Автор: lw_ 15.11.2006, 11:18
Такая ситуация: есть апплет, на нём есть кнопка, при нажатии на кнопку создаётся компонент JTree оборачивается в ScrollPane и помещается в апплет, но вот незадача smile  при нажатии ни чего не происходит, дерево появляется только после того как изменишь мышкий размеры апплета, т.е. когда он перересутся. Посмотрел примерчики и сделал как там, но всё равно не перерисовывает. Пробывал и paint() и repaint() и update(), но эффекта нет. 

вот код:
Код

public class ClickButton extends MouseAdapter {
    
    public void mouseClicked (MouseEvent event){
        tf.setText("Button presed");
        CreateVector (Stages);
        
        for (int i=0; i<10; i++){
            Object o = (Object)i;
            StageArray[i] = "Stage "+o.toString();
        }
        //Создаём дерево
        DefaultMutableTreeNode root = new DefaultMutableTreeNode(tf.getText());
        for(int j=0;j<10;j++){
            DefaultMutableTreeNode stage = new DefaultMutableTreeNode (StageArray[j]);    
            root.add(stage);
        }
        DefaultTreeModel treeModel = new DefaultTreeModel(root);
        JTree tree = new JTree(treeModel);
        spTree = new JScrollPane(tree);
                     Container cp = getContentPane();
        cp.add(spTree,BorderLayout.WEST);
        repaint();
        //spTree.repaint();
        //Rectangle rect = spTree.getBounds();
        //repaint((int)rect.getX(),(int)rect.getY(),(int)rect.getWidth(),(int)rect.getHeight());
    }
 
как ещё можно принудительно перерисовать апплет? 

Автор: LSD 15.11.2006, 12:07
revalidate() затем repaint().

Автор: lw_ 15.11.2006, 18:58
Цитата

revalidate() затем repaint(). 


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

Автор: LSD 16.11.2006, 13:20
Что-то я не понял, как ты размер апплета изменяешь?

Автор: lw_ 16.11.2006, 14:27
Цитата

Что-то я не понял, как ты размер апплета изменяешь? 


прошу прощения, может быть не корректно написал. Естественно это происходит не в браузере. Во время отладки, когда запускаю его appletviewer'ом появляется апплет как окно в винде его можно и растягивать и сварачивать и т.д. Дык вот, компилирую запускаю всё прорисовывается и кнопка и текстовое поле, при нажатии на кнопку должно прорисовывааться и JTree, обёрнутое в JScrollPane, но этого не происходит, а вот если растянуть окно, то апплет перерисовывается и выдаёт JTree. Но когда апплет в браузере, то естественно ни чего не происходит, там то уже так не растянешь. Вот в этом то и проблема, как заставить апплет самому перерисоваться после нажатия кнопки, чтоб он сразу выдал дерево.

Автор: LSD 16.11.2006, 15:22
1. Если запустить его в браузере, а затем свернуть и развернуть окно браузера, что будет?
2. У кого ты вызываешь revalidate() и repaint()?

Автор: lw_ 17.11.2006, 10:05
[quote]
1. Если запустить его в браузере, а затем свернуть и развернуть окно браузера, что будет?
[/quote

ни чего не изменяется, сразу после нажатия кнопки не прорисовывает, и после свёртывания и развёртыванияне не прорисовывает JScrollPane и JTree

Цитата

2. У кого ты вызываешь revalidate() и repaint()? 


у кого тока не вызывал.
делал вот так:
Код

spTree.revalidate();
repaint();

и вот так:
Код

spTree.revalidate();
spTree.repaint();

и так:
Код

tree.revalidate();
repaint();
,

Код

tree.revalidate();
tree.repaint();


и так
Код

...
Container cp = getContentPane();
...
cp.repaint;


Автор: LSD 17.11.2006, 11:25
Код
applet.revalidate();
applet.repaint();

Автор: lw_ 17.11.2006, 13:08
Цитата

applet.revalidate();


блин, или я туплю или чего то не понимаю, ругается он на applet.revalidate();, посмотрел в доках нету такого метода у класса Applet

Автор: LSD 17.11.2006, 13:16
Ага, нету. Там надо applet.validate();.

Автор: lw_ 17.11.2006, 13:40
LSD, smile  спасибо  smile  помогло, аж полегчало

Добавлено @ 13:53 
вопрос решён smile  smile 

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