2013-06-24 25 views
0

由於某些原因,每個圖像只顯示1/5(或更少)。由於它是一個分層窗格,至少應該完全顯示1。佈局爲空,因爲這是一個學習程序 爲什麼會發生這種情況?JLayered窗格不能正確顯示圖像

下面是代碼: 類test1的

import javax.swing.*; 
import java.io.*; 
import java.awt.*; 
import java.awt.image.*; 
import javax.imageio.*; 
import java.awt.Image; 
import java.net.URL; 


public class test extends JPanel 
{ 
    private JFrame frame=new JFrame(""); 
    private JLayeredPane layered =new JLayeredPane(); 
    private BufferedImage image; 
    private test2 image2=new test2(); 



    public test() 
    { 
     try 
     {    
     image=ImageIO.read(new File("im1.png"));  

     } 
     catch (IOException e) 
     { 
      //Nothing 
      e.printStackTrace(); 
     }   
    } 

    public void draw() 
    { 
     frame.setLayout(null); 
     image2.setLayout(null); 
     frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
     frame.setResizable(true); 
     frame.setSize(800,800); 
     frame.add(layered); 
     this.setBounds(30,50,70,80); 
     layered.add(this,new Integer(1)); 
     image2.setBounds(100,120,170,400); 
     layered.add(image2,new Integer(1000)); 
     frame.setContentPane(layered); 
     frame.setVisible(true); 
    } 

    @Override 
    protected void paintComponent(Graphics g) 
    { 
     super.paintComponent(g); 
     g.drawImage(image,0,0,null); 
    } 
    public static void main() 
    { 
     test t=new test(); 
     t.draw(); 
    } 
} 

類test2的

import javax.swing.*; 
import java.io.*; 
import java.awt.*; 
import java.awt.image.*; 
import javax.imageio.*; 
import java.awt.Image; 
import java.net.URL; 


public class test2 extends JPanel 
{ 
    private JPanel thepanel=new JPanel();; 
    private BufferedImage image2; 



    public test2() 
    { 
     try{image2=ImageIO.read(new File("im2.png"));} 
     catch(IOException e){e.printStackTrace();} 
    } 

    @Override 
    protected void paintComponent(Graphics g) 
    { super.paintComponent(g); 
     g.drawImage(image2,0,0,this); 
    } 
} 

我還沒有得到什麼setOpaque(真/假)恰恰是,當它是必要的。

回答

1

只有每個圖像的1/5如您使用的是null佈局和設置,繪製圖像的尺寸較小,則圖像容器的界限顯示

this.setBounds(30,50,70,80); 

image2.setBounds(100,120,170,400); 

使用layout manager,添加JPanelstesttest2JFrame和調用JFrame#pack。通過覆蓋getPreferredSize確保兩個面板都具有首選大小。

旁白:Java命名慣例表明,類名開始大寫字母TestTest2

0

setOpaque(false)基本上將刪除Jcomponent的背景下,從根本上讓它有沒有背景,所以如果你在另一個上面有一個組件然後由頂部組件上稱爲setOpaque將使底部可見

Check out this爲什麼setOpaque()更詳細的信息確實