龙猫12138 2017-06-23 02:40 采纳率: 0%
浏览 843
已采纳

java 以下代码想要实现从硬盘中拿一张图片然后放在面板上,为什么不行呢?

import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

import javax.imageio.stream.FileImageInputStream;
import javax.swing.ImageIcon;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.filechooser.FileNameExtensionFilter;

public class FunctionChangeBack extends JPanel
{
JMenuBar bar ;
JMenu menu ;
JMenuItem openFile ;
JFrame frame ;
public FunctionChangeBack ()
{
panelSet () ;
barSet () ;
frameSet () ;
}
public void paintComponent (Graphics g)
{
super.paintComponent(g) ;
}
public void panelSet ()
{

}
public void frameSet ()
{
    frame = new JFrame () ;
    frame.setLayout(null) ;
    frame.add(bar) ;
    frame.add(this) ;
    frame.setVisible(true) ;
    frame.setSize(1024, 768) ;
}
public void barSet () 
{
    bar = new JMenuBar () ;
    menu = new JMenu ("打开") ;
    openFile = new JMenuItem ("文件") ;

    openFile.addActionListener(new ActionListener ()
    {

        @Override
        public void actionPerformed(ActionEvent e) 
        {
            JFileChooser jfc = new JFileChooser ("src\\game2\\image") ;
            int rs = jfc.showOpenDialog(FunctionChangeBack.this) ;
            FileNameExtensionFilter fnef = new FileNameExtensionFilter ("JPGFile","jpg") ;
            jfc.addChoosableFileFilter(fnef) ;
            if(rs == JFileChooser.APPROVE_OPTION)
            {
                try
                {
                    File file = jfc.getSelectedFile() ;
                    FileImageInputStream fiis = new FileImageInputStream (file) ;
                    FileInputStream fis = new FileInputStream (file) ;
                    byte[] by = new byte[fis.available()] ;
                    while(fiis.read(by) != -1)
                    {
                        fiis.flush() ;
                    }
                    fiis.close() ;
                    fis.close() ;
                    FunctionChangeBack.this.getImage(by) ;
                } 
                catch (IOException e1)
                {
                    e1.printStackTrace();
                }
            }


        }

    });

    menu.add(openFile) ;
    bar.add(menu) ;

    bar.setBounds(0, 0, 1024, 50) ;
}

public void getImage(byte[] by)
{
    System.out.println(by.length) ;
    ImageIcon icon = new ImageIcon (by) ;
    Image image = this.createImage(1024,768) ;
    Graphics gg = image.getGraphics() ;
    Graphics g = this.getGraphics() ;
    System.out.println(icon.getIconWidth()+"   "+icon.getIconHeight()) ;
    gg.drawImage(icon.getImage(), 0, 0, 1024, 768, this) ;
    g.drawImage(image, 0, 0, 1024, 768, this) ;
}
public static void main (String [] args)
{
    new FunctionChangeBack () ;
}

}
我已经从硬盘里面拿到了一张图片了,由我自己写的getimage方法里面的两个println语句可以看出我可以输出这张图片的宽和高,但是为什么画出的图没有显示在面板上呢?多谢各位解答!

  • 写回答

3条回答 默认 最新

  • qq_31206677 2017-06-23 07:49
    关注

    布局管理器默认是BorderLayout,你在往JFrame中添加面板的时候,如果不指定方向,会默认往Center中添加。null表示没有布局管理器,也就是说没有布局管理器充当管理容器内部组件的大小和位置这种角色,既然没有布局管理器管理,自然就需要程序员自己管理,既没设置布局管理器,自己也没管理,自然就看不见了。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 如何在3D高斯飞溅的渲染的场景中获得一个可控的旋转物体
  • ¥88 实在没有想法,需要个思路
  • ¥15 MATLAB报错输入参数太多
  • ¥15 python中合并修改日期相同的CSV文件并按照修改日期的名字命名文件
  • ¥15 有赏,i卡绘世画不出
  • ¥15 如何用stata画出文献中常见的安慰剂检验图
  • ¥15 c语言链表结构体数据插入
  • ¥40 使用MATLAB解答线性代数问题
  • ¥15 COCOS的问题COCOS的问题
  • ¥15 FPGA-SRIO初始化失败