Фрагмент TornadoFX OpenWindow всегда на высоте - PullRequest
0 голосов
/ 11 января 2019

Я работаю с классом fragment в TornadoFX и открываю каждый новый fragment в новом окне, используя метод openWindow().

Окно открывается и все работает хорошо. Я установил модальность на Modality.NONE, чтобы можно было получить доступ к исходному экрану, пока новый фрагмент активен.

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

Это по замыслу / есть ли способ изменить это поведение?

Я поиграл с параметром openWindow() s owner =, установив для него значение null и еще один Stage, но, похоже, ничего не работает.

Сначала код, открывающий окно, view - это фрагмент.

//h here is just the histogram, an int[] 
val hisScope = HistogramScope(h, pointerVM.APUFile.file.name)

//view declared using the find method.
val view = find<Histogram>(hisScope)

view.whenUndocked {
  closeChart(pointerVM)
}

//code checks to see if the requested histogram is already open
val matchingRnameHistograms = isMatchingRnameOpen(pointerVM)

if (map.size == 0 || matchingRnameHistograms.isEmpty()) {

view.openWindow(stageStyle = StageStyle.UTILITY, modality = Modality.NONE, resizable = false, owner = null, block = false)

map.put(pointerVM, view) //record which histograms are open

} else { //.. not too relevant }

Далее я объявил фрагмент с областью действия:

class Histogram : Fragment() {

override val scope = super.scope as HistogramScope

override val root = hbox{

    hgrow = Priority.ALWAYS
    vgrow = Priority.ALWAYS

    style{
        minWidth = 1280.px
        minHeight = 250.px
    }

}

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

1 Ответ

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

Когда вы открываете новое окно в контексте другого, атрибут owner по умолчанию устанавливается на исходный UIComponent. Вы можете передать owner = null на openWindow, чтобы предотвратить это, что позволит расположить окно ниже исходного. Вот полное приложение, показывающее, как это работает:

class MyApp : App(MainView::class)

class MainView : View() {
    override val root = stackpane {
        setPrefSize(800.0, 600.0)
        button("Open new window").action {
            find<NewWindow>().openWindow(owner = null)
        }
    }
}

class NewWindow : Fragment() {
    override val root = label("I'm not modal!")
}

Если вы все еще не можете заставить его работать, попробуйте уменьшить количество факторов в вашем коде:)

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...