Указание значка фрейма в Swing Frame Scala

Как установить новую иконку фрейма в классе Scala scala.swing.Frame? Каковы намерения Frame.iconImage: Image и Frame.iconify()? Я не могу понять, что они делают.

Вот моя последняя попытка

import scala.swing.Frame

class MyFrame extends Frame {
  iconImage = toolkit.getImage("src/main/resources/icon.png")
  visible = true
}

Я также пробовал несколько других методов, но ничего не помогло.


person pvorb    schedule 03.07.2012    source источник


Ответы (2)


Я предполагаю, что вы работаете в OS X. К сожалению, оформление значков не работает для внешнего вида OS X, а также для внешнего вида Nimbus, который, похоже, не имеет определенного оформления окна (использует строку заголовка из ОС Х).

Итак, вам понадобится внешний вид, который рисует собственную строку заголовка окна:

import scala.swing._
import javax.swing._
UIManager.setLookAndFeel(new plaf.metal.MetalLookAndFeel)
JFrame.setDefaultLookAndFeelDecorated(true)

val f = new Frame {
   iconImage = toolkit.getImage(new java.net.URL(
      "http://www.scala-lang.org/sites/default/files/favicon.gif"))
   size = new Dimension(200, 200)
   visible = true
}

Единственный шанс с заголовком окна OS X - это если вы хотите украсить его значком по умолчанию, используемым для определенного файла.

Найдите Window.documentFile здесь: http://developer.apple.com/library/mac/#technotes/tn2007/tn2196.html#//apple_ref/doc/uid/DTS10004439

person 0__    schedule 03.07.2012
comment
«[…] это также не работает для внешнего вида Nimbus […]». Вот и все. Я использую Nimbus, но не упомянул об этом здесь. - person pvorb; 03.07.2012
comment
ср. bugs.sun.com/bugdatabase/ -- не знаю, сделали ли они что-нибудь по этому поводу в Java 7 (я застрял на Java 6 Apple) - person 0__; 03.07.2012
comment
Нет, они этого не сделали. Я использую Java 7. - person pvorb; 03.07.2012

То, что у вас есть, должно работать, но если getImage не может найти файл, он молча терпит неудачу. Поскольку у вас есть относительный путь, это, вероятно, потому, что ваш код не выполняется в том каталоге, который вы предполагали.

В Ubuntu это должно подчеркнуть разницу. Я получаю одно окно со значком смайлика и одно со стандартным значком java.

new Frame() {
  iconImage = toolkit.getImage("/usr/share/icons/gnome/16x16/emotes/stock_smiley-10.png")
  size = new Dimension(200, 200)
  visible = true
}
new Frame() {
  iconImage = toolkit.getImage("xxx")
  size = new Dimension(200, 200)
  visible = true
}
person Sue C    schedule 03.07.2012