2013-06-24 3 views
0

По какой-то причине отображается только 1/5 (или меньше) каждого изображения. Поскольку это слоистая панель, по крайней мере, 1 должна быть полностью отображена. Макет равен нулю, потому что это учебная программа. Почему это происходит?JLayered Pane не отображает правильные изображения

Вот код: Класс 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, добавьте JPanelstest и test2 к JFrame и вызывать JFrame#pack. Убедитесь, что обе панели имеют предпочтительный размер, переопределяя getPreferredSize.

Помимо: Java именования показывают, что имена классов начинаются с прописные букв, таких как Test и Test2.

0

setOpaque(false) в основном будет удалить фон из Jcomponent, по сути, что делает его не имеют никакого фона, поэтому если у вас есть один компонент на другой, то вызываемым setOpaque на верхнем компоненте сделает нижнюю видимую

Check out this для более подробная информация о каком setOpaque() делает