Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Background Image for JScrollPane 
:(
    Опции темы
ShurikA
Дата 12.1.2007, 20:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Зануда
***


Профиль
Группа: Завсегдатай
Сообщений: 1364
Регистрация: 29.10.2005
Где: Канада

Репутация: 2
Всего: 3



Столкнулся я с проблеммой поставить картинку в качестве JScrollPane.
Есть способ поставить картинку на фон JPanel, Но он не сработал.
Мне не удаётся разобраться почему.
 Вот Код:
Код

package apis.FileBrowser;

import java.awt.Graphics;
import java.awt.Image;
import javax.swing.ImageIcon;
import javax.swing.JList;
import java.awt.FlowLayout;
import java.io.IOException;
import javax.swing.JScrollPane;
import javax.swing.JPanel;
import java.io.File;
import java.awt.Dimension;
import apis.FileBrowser.FileFilters.ImageFilter;
import javax.swing.ListSelectionModel;
import java.awt.dnd.*;
import apis.FileBrowser.ThumbnailListModel.FileThumbnail;

/**
 * <p>Title: Apis </p>
 *
 * <p>Description: </p>
 *
 * <p>Copyright: Copyright (c) 2006</p>
 *
 * <p>Company: </p>
 *
 * @author not attributable
 * @version 1.0
 */
public class DirViewer extends JPanel  implements DragSourceListener,
    DragGestureListener {
    private File currDir;
    private JList fileList;
    private ThumbnailListModel listModel = null;
    private long fileSizeLimit;
    private FlowLayout layout = new FlowLayout(FlowLayout.CENTER,0,0);
    //variables for drag&drop
    private DragSource dragSource;
    private Image bgImage = null;

    public DirViewer(String dir) {
        this.setLayout(layout);
        setSize(new Dimension(150,220));
        bgImage = new ImageIcon(getClass().getResource("Images/Background Pictures.png")).getImage();

        if(dir == null)
        {
            currDir = new File(System.getProperty( "user.home" ));
        }
        else
        {
            currDir = new File(dir);
        }

        fileSizeLimit = 0;

        try {
            listModel = new ThumbnailListModel(currDir); //System.getProperty( "user.home" )
        } catch (IOException ioe) {}

        //List Setup
        fileList = new JList(listModel);
        fileList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        fileList.setOpaque(false);
        fileList.setLayoutOrientation(JList.HORIZONTAL_WRAP);
        fileList.setFixedCellHeight(110);
        fileList.setFixedCellWidth(130);
        fileList.setVisibleRowCount( -1);
        fileList.setCellRenderer(new FileThumbCellRenderer(fileSizeLimit));

        JScrollPane listScroller = new JScrollPane(fileList);
        listScroller.setPreferredSize(new Dimension(this.getWidth()-1,this.getHeight()-2));
        listScroller.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
        listScroller.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
        listScroller.getVerticalScrollBar().setPreferredSize(new Dimension(10,listScroller.getHeight()));
        listScroller.getViewport().setOpaque(false);

        this.add(listScroller);

        dragSource = DragSource.getDefaultDragSource();
        dragSource.createDefaultDragGestureRecognizer(fileList,
                                                      DnDConstants.ACTION_COPY, this);
    }
    
    public void paint(Graphics g) {
        if (bgImage != null) {
            g.drawImage(bgImage, 0, 0, null);
        }
        
        super.paintChildren(g);
        
        super.paintBorder(g);
    }

    public void ChangeDir(File dir) {
      currDir = null;
      currDir = dir;
      try {
          listModel.setDirectory(dir);
      } catch (IOException ioe) {}
    }

    public JList getList() {
        return fileList;
    }

    private void ClearAll() {
        listModel.removeAllElements();
    }

    private boolean accept(File f) {
        ImageFilter IFilter = new ImageFilter(fileSizeLimit);
        if (IFilter.accept(f)) {
            return true;
        }
        /*
             TiffFileFilter TFilter = new TiffFileFilter(fileSizeLimit);
             if(TFilter.accept(f))
          return true;

             PSFileFilter PSFilter = new PSFileFilter(fileSizeLimit);
             if(PSFilter.accept(f))
          return true;

             PDFFileFilter PDFFilter = new PDFFileFilter(fileSizeLimit);
             if(PDFFilter.accept(f))
          return true;*/

        return false;
    }

    public String getCurrDir() {
        return currDir.getAbsolutePath();
    }

    public int getLength() {
        return listModel.getSize();
    }

  public void dragGestureRecognized(DragGestureEvent dge) {
    //create a transfarable object
    //and start the drag
    FileThumbnail dragObj = (FileThumbnail) fileList.getSelectedValue();
    ImgNameStringTrans imgStr = new ImgNameStringTrans(dragObj.getFile().getAbsolutePath());
    dge.startDrag(DragSource.DefaultCopyNoDrop,imgStr,this);

  }

  public void dragEnter(DragSourceDragEvent dsde) {
    DragSourceContext context = dsde.getDragSourceContext();
    int action = dsde.getDropAction();
    if((action & DnDConstants.ACTION_COPY) != 0)
      context.setCursor(DragSource.DefaultCopyDrop);
    else
      context.setCursor(DragSource.DefaultCopyNoDrop);

  }

  public void dragOver(DragSourceDragEvent dsde) {
  }

  public void dropActionChanged(DragSourceDragEvent dsde) {
  }

  public void dragExit(DragSourceEvent dse) {
  }

  public void dragDropEnd(DragSourceDropEvent dsde) {
    if(dsde.getDropSuccess() == false)
      return;
    else
      ;
  }
}


фон как был так и остался дефолтовый.
Как с этим побороться?


--------------------
Если долго мучиться, что нибудь получится...
user posted image
PM MAIL WWW ICQ Skype   Вверх
w1nd
Дата 12.1.2007, 21:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вертилятор
***


Профиль
Группа: Завсегдатай
Сообщений: 1077
Регистрация: 22.3.2006
Где: Москва

Репутация: 23
Всего: 54



Вот этого всего не надо:
Код
public void paint(Graphics g) {
        if (bgImage != null) {
            g.drawImage(bgImage, 0, 0, null);
        }
        
        super.paintChildren(g);
        
        super.paintBorder(g);
    }

Переопределяйте paintComponent(Graphics), рисуйте там свою картинку и никаких других paint'ов не дёргайте. И свойство opaque панели устанавливайте в true.


--------------------
user posted imageuser posted image
PM MAIL ICQ   Вверх
powerOn
Дата 12.1.2007, 22:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


Профиль
Группа: Участник
Сообщений: 4367
Регистрация: 7.10.2005

Репутация: 31
Всего: 159



У нас в FAQ есть пример добавления картинки на панель. При этом все работает и при добавлении этой панели в JScrollPane

Код

public class NewJFrame extends javax.swing.JFrame {

    public NewJFrame() {
        initComponents();
    }

    private void initComponents() {
        jScrollPane1 = new javax.swing.JScrollPane();
        picturePanel1 = new ui.PicturePanel();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        picturePanel1.setImageFile(new java.io.File("/win/D/Linux/Wallpapers/17236-1.jpg"));
        picturePanel1.setPreferredSize(new java.awt.Dimension(800, 800));
        jScrollPane1.setViewportView(picturePanel1);

        getContentPane().add(jScrollPane1, java.awt.BorderLayout.CENTER);
        pack();
    }

    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new NewJFrame().setVisible(true);
            }
        });
    }

    private javax.swing.JScrollPane jScrollPane1;
    private ui.PicturePanel picturePanel1;  
}


Это сообщение отредактировал(а) powerOn - 12.1.2007, 22:02


--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
ShurikA
Дата 13.1.2007, 14:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Зануда
***


Профиль
Группа: Завсегдатай
Сообщений: 1364
Регистрация: 29.10.2005
Где: Канада

Репутация: 2
Всего: 3



Цитата(powerOn @  12.1.2007,  21:02 Найти цитируемый пост)
У нас в FAQ есть пример добавления картинки на панель.

Я им и воспользовался.


Цитата(powerOn @  12.1.2007,  21:02 Найти цитируемый пост)
При этом все работает и при добавлении этой панели в JScrollPane

Только не совсем работает если JScrollPane добавлять в панель.


--------------------
Если долго мучиться, что нибудь получится...
user posted image
PM MAIL WWW ICQ Skype   Вверх
powerOn
Дата 13.1.2007, 15:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


Профиль
Группа: Участник
Сообщений: 4367
Регистрация: 7.10.2005

Репутация: 31
Всего: 159



Цитата(ShurikA @  13.1.2007,  14:34 Найти цитируемый пост)
Только не совсем работает если JScrollPane добавлять в панель. 

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


--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   jk1
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема »


 




[ Время генерации скрипта: 0.3029 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.