Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在以下示例中,调整图片大小以适合jpanel_Java_Eclipse_Swing - Fatal编程技术网

Java 在以下示例中,调整图片大小以适合jpanel

Java 在以下示例中,调整图片大小以适合jpanel,java,eclipse,swing,Java,Eclipse,Swing,我已经做了这个程序,但我需要在jpanel图片的大小…不是与滚动条 有人能帮我吗 代码如下: public class ImageList { private JPanel gui; private JFileChooser fileChooser; FilenameFilter fileNameFilter; private JMenuBar menuBar; DefaultListModel model; ImageList() { gui = new JPanel(new G

我已经做了这个程序,但我需要在jpanel图片的大小…不是与滚动条

有人能帮我吗

代码如下:

public class ImageList {

private JPanel gui;
private JFileChooser fileChooser;
FilenameFilter fileNameFilter;
private JMenuBar menuBar;
DefaultListModel model; 

ImageList() {
    gui = new JPanel(new GridLayout());

    JPanel imageViewContainer = new JPanel(new GridBagLayout());
    final JLabel imageView = new JLabel();
    imageViewContainer.add(imageView);

    model = new DefaultListModel(); 
    final JList imageList = new JList(model);
    imageList.setCellRenderer(new IconCellRenderer());
    ListSelectionListener listener = new ListSelectionListener() {

        @Override
        public void valueChanged(ListSelectionEvent lse) {
            Object o = imageList.getSelectedValue();
            if (o instanceof BufferedImage) {
                imageView.setIcon(new ImageIcon((BufferedImage)o));
            }
        }

    };
    imageList.addListSelectionListener(listener);

    fileChooser = new JFileChooser();
    String[] imageTypes = ImageIO.getReaderFileSuffixes();
    FileNameExtensionFilter fnf = new FileNameExtensionFilter("Images", imageTypes);
    fileChooser.setFileFilter(fnf);
    File userHome = new File(System.getProperty("user.home"));
    fileChooser.setSelectedFile(userHome);



    fileNameFilter = new FilenameFilter() {
        @Override 
        public boolean accept(File file, String name) {
            return true;
        }
    };

    menuBar = new JMenuBar();
    JMenu menu = new JMenu("File");
    menuBar.add(menu);
    JMenuItem browse = new JMenuItem("Browse");
    menu.add(browse);
    browse.addActionListener(new ActionListener(){
        @Override 
        public void actionPerformed(ActionEvent ae) {
            int result = fileChooser.showOpenDialog(gui);
            if (result==JFileChooser.APPROVE_OPTION) {
                File eg = fileChooser.getSelectedFile();
                // this will be an image, we want the parent directory
                File dir = eg.getParentFile();
                try {
                    loadImages(dir);
                } catch(Exception e) {
                    e.printStackTrace();
                    JOptionPane.showMessageDialog(
                            gui, 
                            e, 
                            "Load failure!", 
                            JOptionPane.ERROR_MESSAGE);
                }
            }
        }
    });

    gui.add(new JSplitPane(
            JSplitPane.HORIZONTAL_SPLIT, 
            new JScrollPane(
                    imageList, 
                    JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, 
                    JScrollPane.HORIZONTAL_SCROLLBAR_NEVER), 
            new JScrollPane(imageViewContainer)));
}

public void loadImages(File directory) throws IOException {
    File[] imageFiles = directory.listFiles(fileNameFilter);
    BufferedImage[] images = new BufferedImage[imageFiles.length];
    model.removeAllElements();
    for (int ii=0; ii<images.length; ii++) {
        model.addElement(ImageIO.read(imageFiles[ii]));
    }
}

public Container getGui() {
    return gui;
}

public JMenuBar getMenuBar() {
    return menuBar;
}

public static void main(String[] args) {
    SwingUtilities.invokeLater(new Runnable(){
        @Override
        public void run() {
            ImageList imageList = new ImageList();

            JFrame f = new JFrame("Image Browser");
            f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
            f.add(imageList.getGui());
            f.setJMenuBar(imageList.getMenuBar());
            f.setLocationByPlatform(true);
            f.pack();
            f.setSize(800,600);
            f.setVisible(true);
        }
    });
}
}

class IconCellRenderer extends DefaultListCellRenderer {

private static final long serialVersionUID = 1L;

private int size;
private BufferedImage icon;

IconCellRenderer() {
    this(100);
}

IconCellRenderer(int size) {
    this.size = size;
    icon = new BufferedImage(size,size,BufferedImage.TYPE_INT_ARGB);
}

@Override
public Component getListCellRendererComponent(
        JList list, 
        Object value, 
        int index, 
        boolean isSelected, 
        boolean cellHasFocus) {
    Component c = super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
    if (c instanceof JLabel && value instanceof BufferedImage) {
        JLabel l = (JLabel)c;
        l.setText("");
        BufferedImage i = (BufferedImage)value;
        l.setIcon(new ImageIcon(icon));

        Graphics2D g = icon.createGraphics();
        g.setColor(new Color(0,0,0,0));
        g.clearRect(0, 0, size, size);
        g.drawImage(i,0,0,size,size,this);

        g.dispose();
    }
    return c;
}

@Override 
public Dimension getPreferredSize() {
    return new Dimension(size, size);
}
}
公共类图像列表{
私有JPanel gui;
私有JFileChooser文件选择器;
FilenameFilter FilenameFilter;
私人杰门努巴·梅努巴;
默认列表模型;
ImageList(){
gui=newjpanel(newgridlayout());
JPanel imageViewContainer=新的JPanel(新的GridBagLayout());
最终JLabel imageView=新JLabel();
imageViewContainer.add(imageView);
model=新的DefaultListModel();
最终JList图像列表=新JList(型号);
setCellRenderer(新的IconCellRenderer());
ListSelectionListener=新建ListSelectionListener(){
@凌驾
公共作废值已更改(ListSelectionEvent lse){
对象o=imageList.getSelectedValue();
if(o BuffereImage的实例){
setIcon(新的ImageIcon((BufferedImage)o));
}
}
};
imageList.addListSelectionListener(listener);
fileChooser=newjfilechooser();
字符串[]imageTypes=ImageIO.GetReaderFileSuffix();
FileNameExtensionFilter fnf=新FileNameExtensionFilter(“图像”,图像类型);
setFileFilter(fnf);
File userHome=新文件(System.getProperty(“user.home”);
fileChooser.setSelectedFile(userHome);
fileNameFilter=newfilenamefilter(){
@凌驾
公共布尔接受(文件、字符串名称){
返回true;
}
};
menuBar=newjmenubar();
JMenu菜单=新JMenu(“文件”);
菜单栏。添加(菜单);
JMenuItem browse=新的JMenuItem(“浏览”);
菜单.添加(浏览);
browse.addActionListener(新建ActionListener()){
@凌驾
已执行的公共无效行动(行动事件ae){
int result=fileChooser.showOpenDialog(gui);
if(result==JFileChooser.APPROVE\u选项){
File eg=fileChooser.getSelectedFile();
//这将是一个图像,我们需要父目录
File dir=例如getParentFile();
试一试{
加载图像(dir);
}捕获(例外e){
e、 printStackTrace();
JOptionPane.showMessageDialog(
桂,,
E
“负载故障!”,
JOptionPane.ERROR\u消息);
}
}
}
});
添加(新的JSplitPane)(
JSplitPane.HORIZONTAL_SPLIT,
新JScrollPane(
图像列表,
JScrollPane.VERTICAL\u滚动条\u始终,
JScrollPane.水平滚动条,
新的JScrollPane(imageViewContainer));
}
公共void加载映像(文件目录)引发IOException{
File[]imageFiles=directory.listFiles(fileNameFilter);
BuffereImage[]images=新的BuffereImage[imageFiles.length];
model.removeAllElements();

对于(int ii=0;ii也许你应该看一看,听听一些想法。因为我知道有人会提到它,看看我在stackoverflow主题和其他方面尝试了很多方法,但我没有成功……如果你能帮我编写一个代码……我会很感激的。你可以使用,而不是使用ImageIcon,它会根据标签可用空间。因此,两个完全可运行的示例无法帮助您解决问题?不确定我们还能做些什么