Как я могу заморозить на одной панели JTabbedPane? - PullRequest
5 голосов
/ 19 января 2010

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

Как я могу это реализовать? Я думал, что смогу поймать любое событие, вызванное при изменении панели, и вернуться к той панели, на которой я хочу остановиться. Но я беспокоюсь, что это будет не совсем правильно, что в зависимости от того, когда событие действительно запускается, переход на новую панель произойдет после . Я вызываю метод для установки панели на нужную панель. или какое-либо другое подобное состояние гонки. Есть ли способ лучше? Есть ли способ, которым я могу заставить этот подход работать?

Ответы [ 3 ]

6 голосов
/ 19 января 2010

Я бы предложил отключить другие вкладки. Это положительно сказывается на обратной связи с пользователями, которую они не могут щелкнуть на вкладке. В противном случае они могут безумно щелкать и удивляться, почему это не позволит им покинуть вкладку.

Просто включите их снова после заполнения обязательных полей.

2 голосов
/ 19 января 2010

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

setTabComponentAt(int index, Component component) 

или

setSelectedIndex(int index) 

Установите флажок, указывающий, что пользователь не сможет продолжить, пока не выполнит все, что вы от него хотите, и не отключите все остальные вкладки с помощью setEnabledAt(int index, boolean enabled) . После того, как пользователь выполнил необходимое, чтобы продолжить, установите соответствующий флаг и снова включите другие вкладки.

У меня нет времени, чтобы попробовать это решение, но я думаю, что оно должно работать.

2 голосов
/ 19 января 2010

просто отключите JTabbedPane:

pane.setEnabled(false);

и включите его, если все поля установлены правильно (или какое-либо другое условие)

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