Для чего нужен родительский компонент в JFolderChooser.showOpenDialog - PullRequest
1 голос
/ 28 декабря 2010

Дело 1:

JFileChooser myFileChooser;
myFileChooser.showOpenDialog(this); //this = parent Component

Дело 2:

JFileChooser myFileChooser;
myFileChooser.showOpenDialog(null);

В чем практическая разница между двумя случаями?

Ответы [ 2 ]

3 голосов
/ 28 декабря 2010

Извлечение Javadoc для JFileChooser

Родительский аргумент определяет две вещи: рамку, от которой зависит открытое диалоговое окно, и компонент, положение которого внешний вид и внешний вид следует учитывать при размещении диалога.Если родителем является объект Frame (такой как JFrame), то диалог зависит от рамки, а внешний вид позиционирует диалог относительно рамки (например, по центру рамки).Если родительский компонент является компонентом, то диалоговое окно зависит от фрейма, содержащего компонент, и располагается относительно компонента (например, по центру над компонентом).Если родительский элемент равен нулю , то диалоговое окно зависит от отсутствия видимого окна, и оно находится в позиции, зависящей от внешнего вида, например в центре экрана.

внутренне пытается получить окно, используя родителя, используя JOptionPane.getWindowForComponent(parent).Который, в свою очередь, проверяет, является ли родительский элемент нулевым или нет ...

if (parentComponent == null)
    return getRootFrame();

Если это нулевое значение, то фрейм корневого уровня возвращается в качестве родительского контейнера.Используя внутренний SwingUtilities.getSharedOwnerFrame().Javadoc для SwingUtilities.getSharedOwnerFrame() говорит ...

Возвращает приватный, общий, невидимый фрейм инструментария, который будет владельцем JDialogs и JWindows, созданных с нулевыми владельцами.

1 голос
/ 28 декабря 2010

Вы можете указать родителя, чтобы определить, к какому компоненту относится диалог.Он определит позицию вашего диалога (по центру относительно родителя).Я также предполагаю, что диалоговое окно будет модальным, таким образом блокируя родительское окно.

Если вы укажете null, показанное диалоговое окно не будет принадлежать ни одному компоненту, и я предполагаю, что оно будет отображаться либо в левом верхнем углуэкрана или в центре (последнее, что более вероятно произойдет, я не проверял).

Хоп, это помогает!

...