龙猫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 视频编码 十六进制问题
  • ¥15 Xsheii7我安装这个文件的时候跳出来另一个文件已锁定文件的无一部分进程无法访问。这个该怎么解决
  • ¥15 unity terrain打包后地形错位,跟建筑不在同一个位置,怎么办
  • ¥15 FileNotFoundError 解决方案
  • ¥15 uniapp实现如下图的图表功能
  • ¥15 u-subsection如何修改相邻两个节点样式
  • ¥30 vs2010开发 WFP(windows filtering platform)
  • ¥15 服务端控制goose报文控制块的发布问题
  • ¥15 学习指导与未来导向啊
  • ¥15 求多普勒频移瞬时表达式