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


Автор: darkvivi 31.10.2013, 12:06
 Здравствуйте! Столкнулся со следующей проблемой: я создаю уменьшенную/увеличенную картинку на базе имеющейся images Image. Изображение появляется на секунду, потом исчезает где-то секунд на 20, снова появляется на секунду, затем опять исчезает..
 
Код

scaled = images.getScaledInstance(200,
                        200, Image.SCALE_DEFAULT);
        g.drawImage(scaled, 100,500, this);


 Что это может быть?) С изображением я работаю на панели через @override 

Код

JPanel panel = new JPanel(){
            @Override
            public void paintComponent(final Graphics g) {
                super.paintComponent(g);
                                   ...................


А если сделать вместо this - null, то изображение не появляется вообще

Автор: Mirkes 31.10.2013, 16:14
Довольно странный эффект. Я недавно возился с drawImage и та версия метода, которую Вы используете должна спокойно работать с null если образ готов.
Кстати, приведите текст painComponent целиком. Может собака где-то там зарыта smile

Автор: darkvivi 31.10.2013, 16:20
Вот весь код smile

Код

JPanel showpanel = new JPanel(){
            @Override
            public void paintComponent(final Graphics g) {
                super.paintComponent(g);
                // g.setColor(Color.BLUE);
                // g.fillRect(0, 0, 100, 100);
                //for (int j = 0; j<20; j++){
            //      final int key = 0;
            /*     BufferedImage scaled = new BufferedImage(scaledWidth, scaledHeight,
                            BufferedImage.TYPE_INT_RGB);
                    Graphics2D g = scaled.createGraphics();
                    g.drawImage(originalImage, 0, 0, scaledWidth, scaledHeight, null);
                    g.dispose();
                  
                    ImageIO.write(scaled, "JPEG", new File("1.jpg"));
                */
        //Thread thr = new Thread();
                //key = 0;
                 scaled[key] = theseimages[key].getScaledInstance(200,
                        200, Image.SCALE_REPLICATE);
        g.drawImage(scaled[key], 100,500, this);
        //repaint();
        //g.dispose();
    //    repaint();
        
    
                
                
                
                g.drawImage(theseimages[key], 500, 500, null); //Сюда нужно уменьшенную версию!
                g.drawImage(theseimages[key+1], 600, 500, null);
        g.drawImage(theseimages[key+2], 700, 500, null);
            g.drawImage(theseimages[key+3], 800, 500, null);
                //g.drawImage(theseimages[key+4], 900, 500, null);
                JButton right = new JButton ("|>");
                JButton left = new JButton ("<|");
                left.setBounds(400,500,100,20);
                right.setBounds(850,500,100,20);
                add(right);
                add(left);
                left.addActionListener(new ActionListener() {
                    public void actionPerformed(ActionEvent e) {
                //ёж
                        try {
                            //j=j+1;
                        //    iteration();
                            if (key>0){
                            key=key-1;
                            }
                            System.out.println(key);
                            
                            Image scaled[key] = theseimages[key].getScaledInstance(200,
                                        200, Image.SCALE_SMOOTH);
                        g.drawImage(scaled[key], 100, 500, null);
                            
                            
                            //g.drawImage(theseimages[key], 500, 500, null); //Сюда нужно уменьшенную версию!
                            g.drawImage(theseimages[key+1], 600, 500, null);
                            g.drawImage(theseimages[key+2], 700, 500, null);
                            g.drawImage(theseimages[key+3], 800, 500, null);
                            repaint();
                        // changeframe.setVisible(false);
                        } catch (Exception e1) {
                            // TODO Auto-generated catch block
                            e1.printStackTrace();
                        }
                    }
                    });
                
                right.addActionListener(new ActionListener() {
                    public void actionPerformed(ActionEvent e) {
                //ёж
                        try {
                            //j=j+1;
                        //    iteration();
                            key=key+1;
                            System.out.println(key);
                             scaled[key] = theseimages[key].getScaledInstance(100,
                                        100, Image.SCALE_SMOOTH);
                             //g.drawImage(scaled[key], 100,500, null);
                        
                            g.drawImage(theseimages[key], 500, 500, null); //Сюда нужно уменьшенную версию!
                            g.drawImage(theseimages[key+1], 600, 500, null);
                            g.drawImage(theseimages[key+2], 700, 500, null);
                            g.drawImage(theseimages[key+3], 800, 500, null);
                            
                            
                            repaint();
                        // changeframe.setVisible(false);
                        } catch (Exception e1) {
                            // TODO Auto-generated catch block
                            e1.printStackTrace();
                        }
                    }
                    });
                
                //}
                System.out.println("DRAW");
                //ImageIcon icon = new ImageIcon(image);
                //theseimages[j]
                
            }
        };

может нужно g.dispose() использовать?

 Решил оставить только 
Код

JPanel showpanel = new JPanel(){
            @Override
            public void paintComponent(final Graphics g) {
                super.paintComponent(g);
scaled[key] = theseimages[key].getScaledInstance(200,
                        200, Image.SCALE_SMOOTH);        
        g.drawImage(scaled[key], 100,500, null);
            }    
        };


Изображение стало мигать чаще...раз в 10 секунд где-то...

Автор: Mirkes 1.11.2013, 02:45
А что у Вас творится с приложением, что форма 10 раз в секунду перерисовывается?

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