2015-06-14 77 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)); 

編輯:我想補充的JLabel和Jbuttons中的JScrollPane中與背景

回答

2

如果你的目標是簡單地顯示圖像在沒有顯示的其他組件(如一個JTable)在JScrollPane中,那麼你應該一個JScrollPane:

  • 通過new ImageIcon(myImage)
  • 做一個ImageIcon出你的形象
  • 將該圖標添加到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類並通過的paintComponent方法覆蓋內繪製它(如果你對這個搜索顯示在此JPanel的形象,你會發現許多例子,一些由我),然後將按鈕/組件添加到此圖像繪製JPanel,然後將此JPanel添加到JScrollPane的視口中,就像我對上面的JLabel所做的那樣。

+0

如果我不得不添加其他對象,如按鈕怎麼辦?....我該怎麼做? – user3188978

+1

@ user3188978:請參閱編輯以回答。 –