Как сохранить изображение и переименовать его одновременно при сохранении?

Хотите создать JFileChooser и JTextFieldЗатем просмотрите изображение из любой папки. Указан путь, поэтому он переименует изображение, и имя изображения будет jtextfield.getText();, а затем будет сохранено по указанному мной пути. Я знаю, что это сложно реализовать. Я сделал часть.

JFileChooser и jtextfield создаются. Изображение сохраняется по указанному мной пути. Но это не переименование изображения. (Переименовать изображение должно быть jtextfield.jpg)

import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.imageio.ImageIO;
import javax.swing.*;
import javax.swing.filechooser.FileNameExtensionFilter;
import java.io.File;

public class ImgClass {

    public ImgClass() {
        final JFrame frame = new JFrame("Save Image");

                    final JTextField username = new JTextField();
            username.setBounds(105, 102, 192, 20);
            frame.add(username);
            username.setColumns(10);

        JButton saveImage = new JButton("Browse");
        saveImage.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                JFileChooser chooser = new JFileChooser();
                FileNameExtensionFilter filter = new FileNameExtensionFilter(
                        "JPG, GIF, and PNG Images", "jpg", "gif", "png");
                chooser.setFileFilter(filter);
                int returnVal = chooser.showOpenDialog(frame);
                if (returnVal == JFileChooser.APPROVE_OPTION) {
                    File file = chooser.getSelectedFile();
                    System.out.println("You choose to open this file: "
                            + file.getName());
                    BufferedImage image;
                    try {
                        image = ImageIO.read(file);
                       ImageIO.write(image, "jpg",new File("D:\\Img\\" + username.getText()+".jpg"));
                    } catch (IOException ex) {
                        Logger.getLogger(ImgClass.class.getName()).log(Level.SEVERE, null, ex);
                    }              
                }
            }
        });



        frame.add(saveImage);
        frame.setLayout(new GridBagLayout());
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(300, 300);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);


    }

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

person Indranil Banerjee    schedule 18.07.2014    source источник
comment
Тег java-ee удален.   -  person Hovercraft Full Of Eels    schedule 18.07.2014
comment
Вы должны использовать showSaveDialog для сохранения   -  person Paul Samsotha    schedule 19.07.2014


Ответы (1)


Вы используете одно и то же имя файла при записи файла. Рассмотрим получение текста из JTextField и его использование.

String newName = username.getText();

// no not this!
// File newFile = new File("D:\\Img\\" + file.getName()));

// but this!
file newFile = new File("D:\\Img\\" + newName));
// write with newFile

Изменить
В комментарии вы указываете:

Хороший подход. Но проблема в том, что если я напишу «abc» в jtextfield, то формат файла изображения будет сохранен неправильно. Если я пишу abc.jpg в jtextfield, то все работает нормально. Пожалуйста, предложите мне любую модификацию.

Я предлагаю вам написать небольшой фрагмент кода, который проверяет строку (названную выше newName), чтобы увидеть, заканчивается ли она на ".jpg" или что-то подобное, например, ".JPG", и если нет, то предоставить строку с таким окончание. Я уверен, что вы можете решить эту проблему. ;)

person Hovercraft Full Of Eels    schedule 18.07.2014
comment
Хороший подход. Но проблема в том, что если я напишу «abc» в jtextfield, то формат файла изображения будет сохранен неправильно. Если я пишу abc.jpg в jtextfield, то все работает нормально. Пожалуйста, предложите мне любую модификацию. - person Indranil Banerjee; 19.07.2014
comment
@IndranilBanerjee: это легко исправить, и я призываю вас сделать это. См. редактирование выше. - person Hovercraft Full Of Eels; 19.07.2014
comment
@IndranilBanerjee: если вы застряли в этой попытке, покажите, что вы сделали в качестве редактирования своего вопроса, а затем отправьте мне комментарий здесь. Сам я бы использовал метод String .endsWith(...). - person Hovercraft Full Of Eels; 19.07.2014
comment
@IndranilBanerjee: или вы могли бы просто посмотреть - person Hovercraft Full Of Eels; 19.07.2014
comment
Ты слишком хорош. Моя отредактированная часть: ImageIO.write(изображение, jpg, новый файл(D:\\Img\\ + username.getText()+.jpg)); - person Indranil Banerjee; 19.07.2014
comment
@IndranilBanerjee Расширение не имеет значения, то, что вы передаете в ImageIO, будет определять формат, который фактически используется. - person MadProgrammer; 19.07.2014
comment
@ MadProgrammer Тогда что мне делать ? Помоги мне, пожалуйста - person Indranil Banerjee; 19.07.2014
comment
@IndranilBanerjee: re "what should I do" - лучше определите свою текущую проблему, если она все еще у вас есть. - person Hovercraft Full Of Eels; 19.07.2014
comment
@ Корабль на воздушной подушке, полный угрей: Большое спасибо. Вы очень помогли мне решить мою программу. - person Indranil Banerjee; 21.07.2014