Реализация кнопки загрузки изображений с использованием Jython & Swing - PullRequest
0 голосов
/ 09 декабря 2018

Я разрабатываю кроссплатформенное настольное приложение с использованием Jython и Swing, и я нашел заминку.
Я хотел бы разработать кнопку, которая позволит мне загрузить изображение на заднем плане и изменить его.когда я нажимаю на загруженное изображение.

Прилагаю в качестве примера несколько картинок о том, как бы я хотел, чтобы мой виджет был.

Панель загрузки без изображения

А потом, когда язагрузить изображение:

Панель загрузки с изображением

Я пытался использовать следующий код:

fd = FileDialog(self, "Scegli un'immagine", FileDialog.LOAD)
fd.setFile(';*.'.join(("*.bmp","jpg","jpeg","wbmp","png","gif")))
fd.setVisible(True)
fileName = fd.getFile()
if fileName != None :
    fileAbsPath = os.path.abspath(fileName)
    """'self.bigDict['imgButton']' is the current JButton"""
    self.bigDict['imgButton'].setIcon(ImageIcon(fileAbsPath))

Когда я нажимаю "Открыть », изображение не вставлено в кнопку.Я не понимаю, почему.
Я также пытался использовать следующий код:

if fileName != None :
    fileAbsPath = os.path.abspath(fileName)
    img = ImageIO.read(getClass().getResource(fileAbsPath))
    self.bigDict['imgButton'].setIcon(img)

В приведенном выше примере сообщается о следующей ошибке:

img = ImageIO.read(getClass (). getResource (fileAbsPath))
TypeError: getClass (): ожидается 1 аргумент;получил 0

Мне было бы интересно узнать, почему кнопка не обновляется с загруженным изображением, и почему вышеупомянутая ошибка в java не произойдет.

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 02 января 2019

Проблема очень проста.
Когда изображение загружается с помощью FileDialog , оно «фактически находится» в окне FileDialog, но изображение не существует.Я понял это, когда попытался скопировать изображение из абсолютного пути в папку назначения, используя shutil.copy2(self.imgAbsPath, destinationPath+'/'+self.imgName), в котором сообщалось об ошибке, указывающей, что изображение не существует.
Чтобы указать конкретный путь к файлу, оноНеобходимо добавить информацию о папке, где она находится.
На практике вы должны создать относительный путь , прежде чем генерировать абсолютный:

fd = FileDialog(self, "Scegli un'immagine", FileDialog.LOAD)
fd.setFile(';*.'.join(("*.bmp","jpg","jpeg","wbmp","png","gif")))
fd.setVisible(True)
self.imgName = fd.getFile()
relativePath = fd.getDirectory() + fd.getFile() """Here is the missing piece!"""
if self.imgName != None:
   self.imgAbsPath = os.path.abspath(relativePath) """Here the absolute path is correctly obtained!"""
   self.bigDict['imgButton'].setIcon(ImageIcon(ImageIcon(self.imgAbsPath).getImage().getScaledInstance(130, 130, Image.SCALE_DEFAULT)))
   """The image, before being inserted into the button, is slightly resized, to avoid graphic bumps!"""

Надеюсь, я вам помог.

0 голосов
/ 28 декабря 2018

getClass () требует 1 аргумент: неявный this аргумент.Вы должны вызвать метод объекта или использовать нотацию MyClass.class.

...