2015-06-14 6 views
4

Как добавить изображение в качестве фона в JScrollPane? Я попробовал это, но изображение не отображается:Изображение в качестве фона в JScrollPane

BufferedImage img = null; 
    try { 
     img = ImageIO.read(new File("C:\\Users\\Suraj\\Documents\\NetBeansProjects\\JavaApplication2\\src\\javaapplication2\\images\\2.jpg")); 
    } 
    catch (IOException e) { 
     e.printStackTrace(); 
    } 
    Image imag = img.getScaledInstance(d.width, d.height, Image.SCALE_SMOOTH); 
    ImageIcon imageBack = new ImageIcon(imag); 
    FlowLayout fl = new FlowLayout(); 
    frame.getContentPane().setLayout(fl); 
    fl.addLayoutComponent(null, new JLabel(imageBack)); 

EDIT: Я хотел бы добавить компоненты JLabel и JButtons на JScrollPane с фоном

ответ

2

Если ваша цель состоит в том, чтобы просто показать изображение в JScrollPane без показа других компонентов (таких как JTable) в JScrollPane, то вы должны:

  • Сделать ImageIcon из вашего изображения с помощью new ImageIcon(myImage)
  • Добавьте эту иконку в JLabel
  • Поместите JLabel в окно просмотра JScrollPane, что можно сделать, передав JLabel в конструктор JScrollPane.

И все сделано.

Если вам нужно сделать что-то еще, то более подробно описывайте свою проблему.

Например,

import java.awt.BorderLayout; 
import java.awt.Dimension; 
import java.awt.image.BufferedImage; 
import java.io.IOException; 
import java.net.URL; 
import javax.imageio.ImageIO; 
import javax.swing.*; 

@SuppressWarnings("serial") 
public class ImageInScrollPane extends JPanel { 
    public static final String IMAGE_PATH = "http://image.desk7.net/" 
     + "Space%20Wallpapers/1422_1280x800.jpg"; 
    private static final int PREF_W = 500; 
    private static final int PREF_H = 400; 


    public ImageInScrollPane() throws IOException { 
     URL imageUrl = new URL(IMAGE_PATH); 
     BufferedImage img = ImageIO.read(imageUrl); 
     Icon icon = new ImageIcon(img); 
     JLabel label = new JLabel(icon); 
     JScrollPane scrollPane = new JScrollPane(label); 

     setLayout(new BorderLayout()); 
     add(scrollPane); 
    } 

    @Override 
    public Dimension getPreferredSize() { 
     if (isPreferredSizeSet()) { 
     return super.getPreferredSize(); 
     } 
     return new Dimension(PREF_W, PREF_H); 
    } 

    private static void createAndShowGui() { 
     ImageInScrollPane mainPanel = null; 
     try { 
     mainPanel = new ImageInScrollPane(); 
     } catch (IOException e) { 
     e.printStackTrace(); 
     System.exit(-1); 
     } 

     JFrame frame = new JFrame("ImageInScrollPane"); 
     frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
     frame.getContentPane().add(mainPanel); 
     frame.pack(); 
     frame.setLocationByPlatform(true); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
     public void run() { 
      createAndShowGui(); 
     } 
     }); 
    } 
} 

Вы спросите в комментариях:

что, если я должен добавить другие объекты, такие как кнопки .... Как это сделать?

В этой ситуации я бы создать класс, который расширяет JPanel и отобразить изображение в этом JPanel, рисуя его в методе paintComponent переопределения (если вы ищете на это, вы найдете много примеров, некоторые из них), затем добавьте кнопки/компоненты к этому графическому чертежу JPanel, а затем добавив этот JPanel в окно просмотра JScrollPane, как и в случае с JLabel выше.

+0

Что делать, если мне нужно добавить другие объекты, такие как кнопки? ... Как это сделать? – user3188978

+1

@ user3188978: посмотрите, пожалуйста, отредактируйте для ответа. –

Смежные вопросы