• Как сделать подгрузку изображений к списку?

    @sqwartl Автор вопроса
    Блин, чета при запуске нескольких картинок, элипс потом выдает:
    Exception in thread "Image Fetcher 0" java.lang.OutOfMemoryError: Java heap space
    	at java.awt.image.DataBufferInt.<init>(Unknown Source)
    	at java.awt.image.Raster.createPackedRaster(Unknown Source)
    	at java.awt.image.DirectColorModel.createCompatibleWritableRaster(Unknown Source)
    	at sun.awt.image.ImageRepresentation.createBufferedImage(Unknown Source)
    	at sun.awt.image.ImageRepresentation.setPixels(Unknown Source)
    	at sun.awt.image.ImageDecoder.setPixels(Unknown Source)
    	at sun.awt.image.JPEGImageDecoder.sendPixels(Unknown Source)
    	at sun.awt.image.JPEGImageDecoder.readImage(Native Method)
    	at sun.awt.image.JPEGImageDecoder.produceImage(Unknown Source)
    	at sun.awt.image.InputStreamImageSource.doFetch(Unknown Source)
    	at sun.awt.image.ImageFetcher.fetchloop(Unknown Source)
    	at sun.awt.image.ImageFetcher.run(Unknown Source)


    Я так понял выделеноой яве, памяти не хватает?
    Как то можно сделать, чтобы каждый раз подгружая новую картинку, память очищалась или что-то в этом роде?
  • Как сделать подгрузку изображений к списку?

    @sqwartl Автор вопроса
    Пресвятые джигурдинки! Все...огромное спасибо, Вам за терпение и помощь! Будете в Новосибирске с меня пиво!
  • Как сделать подгрузку изображений к списку?

    @sqwartl Автор вопроса
    ну и соотв из метода paint убираем это?:
    Image image = ImageProvider.getImage();
  • Как сделать подгрузку изображений к списку?

    @sqwartl Автор вопроса
    В момент выставления ImageProvider.getImage() эклипс сам сделал его статичным....По последнему Вашему описанию, я не понял про кнопку, те там убираем все, что относится к ImageProvider и заменяем на canvas.setImage(image);?
  • Как сделать подгрузку изображений к списку?

    @sqwartl Автор вопроса
    import java.awt.Image;
    
    public interface ImageProvider {
        static Image getImage() {
    		
    		return null;
    	}
    }
  • Как сделать подгрузку изображений к списку?

    @sqwartl Автор вопроса
    Когда ставил с маленькой буквы, Эклипс выдает:
    This static method of interface ImageProvider can only be accessed as ImageProvider.getImage

    И меняет соотв на "ImageProvider"
  • Как сделать подгрузку изображений к списку?

    @sqwartl Автор вопроса
    Не..не работает. но ошибок никаких нет....картинки все в нужных местах, имена, расширение проверил.
  • Как сделать подгрузку изображений к списку?

    @sqwartl Автор вопроса
    Николай Ступак: а черт....простите...
    Так д\б:
    public static class TransformingCanvas extends JComponent {
            
        	public static final long serialVersionUID = 1L;
        	public double translateX;
        	public double translateY;
        	public double scale;
    		@SuppressWarnings("unused")
    		private ImageProvider imageProvider;
     
            TransformingCanvas() {
                translateX = 0;
                translateY = 0;
                scale = 0.5;
                setOpaque(true);
                setDoubleBuffered(true);
            }
            public void setImageProvider(ImageProvider imageProvider) {
         	   this.imageProvider = imageProvider;
         	   repaint();
         	}
            @SuppressWarnings("unchecked")
    		@Override 
            public void paint(Graphics g) {
    
                Image image = ImageProvider.getImage(); 
          
                AffineTransform tx = new AffineTransform();
                tx.translate(translateX, translateY);
                tx.scale(scale, scale);
                Graphics2D ourGraphics = (Graphics2D) g;
     
                ourGraphics.setColor(Color.WHITE);
                ourGraphics.fillRect(0, 0, getWidth(), getHeight());
     
                ourGraphics.setTransform(tx);
                ourGraphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
                        RenderingHints.VALUE_ANTIALIAS_ON);
                ourGraphics.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
                        RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
          
                ourGraphics.drawImage(image, 100, 100, this);
            }   
        }
  • Как сделать подгрузку изображений к списку?

    @sqwartl Автор вопроса
    Николай Ступак:
    Все равно не выходит.
    Вот вставил сеттер на загрузку изобр:

    public class tests {
     
    	public static TransformingCanvas canvas;
        
        public static void main(String[] args) {
            JFrame frame = new JFrame();
            JPanel toolbar = new JPanel();
            
            
            final String[] number = new String[] {"", "1044", "1045", "1046", "1054"}; 
            final JComboBox combo = new JComboBox(number);
            combo.setSelectedIndex(0);
            combo.setEditable(true);
                
            
            final JButton butGo = new JButton("GO");
                
            butGo.addActionListener(new ActionListener() {        
                public void actionPerformed(ActionEvent e) {            
                  canvas.setImageProvider(new ImageProvider() {
                      public Image getImage() {
                          Object n = combo.getSelectedItem();
                          Image image = new ImageIcon(n + ".jpg").getImage();
                          return image;
                      }
                  });
                }   
          });
            toolbar.add(combo);
            toolbar.add(butGo);


    Вот вставил сеттера в тр-канвас:
    public static class TransformingCanvas extends JComponent {
            
        	public static final long serialVersionUID = 1L;
        	public double translateX;
        	public double translateY;
        	public double scale;
    		private ImageProvider imageProvider;
     
            TransformingCanvas() {
                translateX = 0;
                translateY = 0;
                scale = 0.5;
                setOpaque(true);
                setDoubleBuffered(true);
            }
     
            public void setImageProvider(ImageProvider imageProvider) {
     		   this.imageProvider = imageProvider;
     		   repaint();
     		}
    
    		@SuppressWarnings("unchecked")
    		@Override 
            public void paint(Graphics g) {
            	      
                AffineTransform tx = new AffineTransform();
                tx.translate(translateX, translateY);
                tx.scale(scale, scale);
                Graphics2D ourGraphics = (Graphics2D) g;
     
                ourGraphics.setColor(Color.WHITE);
                ourGraphics.fillRect(0, 0, getWidth(), getHeight());
     
                ourGraphics.setTransform(tx);
                ourGraphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
                        RenderingHints.VALUE_ANTIALIAS_ON);
                ourGraphics.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
                        RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
     
               		
                ourGraphics.drawImage((Image) imageProvider, 100, 100, this);
            }
        }


    Приложение запускается, но при нажатии на кнопку, эклипс выдает ошибку:
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)
  • Как сделать подгрузку изображений к списку?

    @sqwartl Автор вопроса
    Спасибо большое, за пояснение. Осталось только понять, что вы посоветовали...точнее я почти понял, осталось сделать(у меня опыта в яве два мес).
    PS. Дочерние компоненты не нужны(слава богу). Изначально код(как мне его дали) просто рисовал фигуры и позволял их масштабировать(мне нужен был именно этот метод). \\\Блин я у же столько документации перечитал, что теперь в голове толька каша))) Спасибо еще раз за подсказку.
  • Как сделать подгрузку изображений к списку?

    @sqwartl Автор вопроса
    Ведь мне нужен же из метода main слушатель (combo.getSelectedItem();)...и как его передать в конструктор? Простите..можете пример черкануть, я не до конца, понял, что Вы подразумеваете...