TCP/IP发送图片,swing.JPanel显示并更新图片(一、图片显示和更新)

作者要做一个演示图片传输的小工具,需求如下:

1. 建立TCP/IP连接

2. 在服务器界面上显示正在传输给客户端的图片

3. 客户端显示已经接受完成的图片

4. 服务器将指定目录下的,符合命名规则的所有图片都传输到客户端


本篇先介绍在JPanel上图片的显示和更新

图片显示和更新:


1)调用类的方法

 //要显示的图片放在工程的根目录的Sample Picture文件夹下,即与src是同级的目录。图片用数字命名

int countPhoto = 2;
File file = null;
file = new File("Sample Pictures/" + countPhoto + ".jpg");
//显示图片更新
Image image=ImageIO.read(file);
imagePanel.loadPhoto(image);
imagePanel.repaint();


在imagePanel中的代码如下:

/*
 * 用于显示图片的JPanel, 放在frame中
 */
class ImagePanel extends JPanel {
private Image image;

        //初始化时,加载的图片1.jpg
public ImagePanel()
{
        try
        {
    image=ImageIO.read(new File("Sample Pictures/1.jpg"));
   }catch(IOException e)
   {
    e.getStackTrace();
        }
        }

        //实现图片的更新
public void loadPhoto(Image img)
{
            image=img;
repaint();
}

public void paintComponent(Graphics g)
{
super.paintComponent(g);

if(image==null) return;

int imageWidth=image.getWidth(this);
int imageHeight=image.getHeight(this);

//将图片画在左上角
g.drawImage(image, 0, 0, null);

}
}




网搜加载图片的原理如下:

ImagePanel可以从JPanel继承。ImagePanel相对与JPanel,多了一个图像显示的功能,所以里面一定要有获取图片的方法,还必须重载paintComponent方法。

关于paintComponent这我想多说一点。可视化组件要完成显示的工作一般都要调用paint方法,而paint方法又把绘图任务交给了三个方法:paintComponent,paintBorder,和paintChildren。我们只需把需要个性定制的实现代码放在paintComponent方法里,在添加你的代码之前记得一定要调用super.paintComponent。在写自己的实现方法前一定要记住给自己留一条退路。什么退路?比如说我们前面提到的关闭文件方法,要实现一定的清理工作,等价于不在原组件里画图。这里我们可以这样实现:

一般情况下,我们不能直接调用paint方法,当需要更新显示内容时直接调用repaint。repaint先完成一定的清理工作然后会调用paint,paint又调用paintComponent,就可以显示出你画的东西了。



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值