由于某种原因,每个图像仅显示1/5(或更少)。由于它是一个分层窗格,至少应该完全显示1个。布局为空,因为这是一个学习计划 为什么会这样?
这是代码: 类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();
}
}
Class 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(true / false)以及何时需要。
答案 0 :(得分:1)
当您使用1/5
布局时,每个图像仅显示null
,并将绘制图像的容器边界设置为小于图像的尺寸
this.setBounds(30,50,70,80);
和
image2.setBounds(100,120,170,400);
使用layout manager,将JPanels
test
和test2
添加到JFrame
并调用JFrame#pack
。通过覆盖getPreferredSize
确保两个面板都具有首选大小。
除此之外:Java命名约定显示类名以大写字母开头,例如Test
和Test2
。
答案 1 :(得分:0)
setOpaque(false)
基本上会删除Jcomponent
的背景,基本上使它没有背景,所以如果你有一个组件在另一个组件之上,那么在顶部组件上调用setOpaque会使底部可见
Check out this有关setOpaque()的详细信息