Swingbuilder - центрирование местоположения приложения - PullRequest
3 голосов
/ 26 апреля 2010

Я создаю приложение, используя Griffon-> SwingBuilder. Я хотел бы иметь возможность центрировать приложение на рабочем столе.

Я знаю, что у нас есть аргумент 'location: [x, y]', который мы можем предоставить при создании приложения. Есть ли в любом случае доступ к свойствам рабочего стола для расчета центра?

Ответы [ 2 ]

3 голосов
/ 27 апреля 2010

По разным причинам вы не можете сделать это встроенным. Вот один из способов центрирования

import java.awt.*
import groovy.swing.*

sb = new SwingBuilder()
sb.build {
  f = frame(pack:true) {
      label "<html>" + (("This is a very long label."*3) + "<BR>")*5
  }
  Point cp = GraphicsEnvironment.localGraphicsEnvironment.centerPoint
  f.location = new Point((int)(cp.x - f.width), (int) (cp.y - f.height))
  f.show()
}

Причина, по которой вы не можете установить его в атрибутах, заключается в том, что при оценке атрибутов дочерний узел еще нигде не был создан или сохранен. Один из вариантов - установить его как часть дочернего блока контента:

  frame(show:true) 
  {
      label "<html>" + (("This is a very long label."*3) + "<BR>")*5
      current.pack()
      Point cp = GraphicsEnvironment.localGraphicsEnvironment.centerPoint
      current.location = new Point((int)(cp.x -current.width/2), (int)(cp.y - current.height/2))
  }

(current является мета-переменной для содержащего узла).

0 голосов
/ 27 апреля 2010

Одной из особенностей Swing является то, что она запоминает последнюю позицию и размер (если изменяет размер)

...