在Java中关于带图片的Jpanel的显示问题?
我做了一个带图片的JPanel组件,将它添加到JFrame中,当JFrame的布局为BorderLayout时,可以正常显示,当为FlowLayout布局时,显示出问题了...
我做了一个带图片的JPanel组件,将它添加到JFrame中,当JFrame的布局为BorderLayout时,可以正常显示,当为FlowLayout布局时,显示出问题了,求指点?
/**
* 点餐界面中桌子组件
*/
package com.qiqiclient.view;
import java.awt.*;
import javax.swing.*;
import com.qiqiclient.tool.SeveralFonts;
public class OrderFace_ZhuoZi extends JPanel{
private int zuoHao=101; //桌号
private int peopleEatNum=2; //就餐人数
private String zuoZiState="空净"; //座子状态
private int zuoziDefaultEatNum=3; //座子额定就餐人数
private String backPicName="orderFace_KongJing.png";
private Image im=null; //背景图片
//构造函数
public OrderFace_ZhuoZi(int zuoHao,int zuoziDefaultEatNum,int peopleEatNum,String zuoZiState,String backPicName){
this.zuoHao=zuoHao;
this.zuoziDefaultEatNum=zuoziDefaultEatNum;
this.peopleEatNum=peopleEatNum;
this.zuoZiState=zuoZiState;
this.backPicName=backPicName;
im=this.dealBackPic();
// this.setSize(200,200);
}
//绘制函数
public void paint(Graphics g){
super.paint(g);
g.drawImage(im, 0, 0, 85,57, this);
g.setFont(SeveralFonts.setFontSong13());
g.setColor(Color.black);
g.drawString(zuoHao+"", 5, 15);
g.drawString(zuoziDefaultEatNum+"人桌", 5, 32);
g.drawString(peopleEatNum+"/"+zuoziDefaultEatNum, 55, 32);
g.drawString(zuoZiState, 55, 52);
}
//处理背景图片
public Image dealBackPic(){
Image tempImage=null;
String temp="/images/"+backPicName;
tempImage=new ImageIcon(getClass().getResource(temp)).getImage();
return tempImage;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
JFrame jFrame=new JFrame();
jFrame.setSize(400, 400);
jFrame.setLayout(new FlowLayout());
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
OrderFace_ZhuoZi a1=new OrderFace_ZhuoZi(1, 3, 2, "空净", "orderFace_KongJing.png");
jFrame.add(a1);
jFrame.setVisible(true);
}
} 展开
/**
* 点餐界面中桌子组件
*/
package com.qiqiclient.view;
import java.awt.*;
import javax.swing.*;
import com.qiqiclient.tool.SeveralFonts;
public class OrderFace_ZhuoZi extends JPanel{
private int zuoHao=101; //桌号
private int peopleEatNum=2; //就餐人数
private String zuoZiState="空净"; //座子状态
private int zuoziDefaultEatNum=3; //座子额定就餐人数
private String backPicName="orderFace_KongJing.png";
private Image im=null; //背景图片
//构造函数
public OrderFace_ZhuoZi(int zuoHao,int zuoziDefaultEatNum,int peopleEatNum,String zuoZiState,String backPicName){
this.zuoHao=zuoHao;
this.zuoziDefaultEatNum=zuoziDefaultEatNum;
this.peopleEatNum=peopleEatNum;
this.zuoZiState=zuoZiState;
this.backPicName=backPicName;
im=this.dealBackPic();
// this.setSize(200,200);
}
//绘制函数
public void paint(Graphics g){
super.paint(g);
g.drawImage(im, 0, 0, 85,57, this);
g.setFont(SeveralFonts.setFontSong13());
g.setColor(Color.black);
g.drawString(zuoHao+"", 5, 15);
g.drawString(zuoziDefaultEatNum+"人桌", 5, 32);
g.drawString(peopleEatNum+"/"+zuoziDefaultEatNum, 55, 32);
g.drawString(zuoZiState, 55, 52);
}
//处理背景图片
public Image dealBackPic(){
Image tempImage=null;
String temp="/images/"+backPicName;
tempImage=new ImageIcon(getClass().getResource(temp)).getImage();
return tempImage;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
JFrame jFrame=new JFrame();
jFrame.setSize(400, 400);
jFrame.setLayout(new FlowLayout());
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
OrderFace_ZhuoZi a1=new OrderFace_ZhuoZi(1, 3, 2, "空净", "orderFace_KongJing.png");
jFrame.add(a1);
jFrame.setVisible(true);
}
} 展开
展开全部
a1用setBounds设置一下面板的大小。
追问
a1设置setBounds后只有在JFrame为空布局才有用,这样的话如果要放多个a1,都得设置,而且要计算位置,不太好
追答
Flow布局和Border布局不同,border布局会根据其父组件的大小来和其他组件的位置关系设置组件本身的大小。
而Flow布局不会去这么做,因此你需要自己主动的去设置组件的大小。
其方法有三个,这里那你需要的是这个:a1.setPreferredSize(new Dimension(100, 100));
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询