2010-01-19 12 views
5

특정 상황에서 사용자가 특정 정보를 제공 할 때까지 하나의 창에 JTabbedPane이 있어야합니다. 본질적으로,이 상황이 발생하면 현재 창을 모달 화해야합니다.JTabbedPane의 한 창에서 어떻게 멈출 수 있습니까?

어떻게 구현할 수 있습니까? 내가 창을 바꿀 때 어떤 이벤트가 발생했는지를 파악할 수 있다고 생각하고 계속 붙이고 싶은 창으로 다시 설정했습니다. 그러나 이것이 옳지 않을까 걱정됩니다. 이벤트가 실제로 발생하면 새 창으로의 전환이 발생합니다. 이후에 을 호출합니다. 원하는 창으로 패널을 설정하는 방법을 호출하거나 다른 방법을 사용합니다. 비슷한 경쟁 조건. 더 좋은 방법이 있습니까? 이 접근 방식을 사용할 수있는 방법이 있습니까?

+0

JDialog 또는 JOptionPane을 사용할 수 없습니까? – ChadNC

+0

@ChadNC, 나는 그것에 대해 생각해 보았습니다. 실제로이 옵션을 선호 하겠지만,이 경우 사용자는 동결해야 할 상황을 제거하기 위해이 창에서 조치를 취해야합니다. 또한 해당 창에서 컨트롤을 사용하여 여러 가지 방법으로 상태를 완화 할 수 있습니다. 모달 대화 상자가 나타나면 모든 컨트롤에 액세스 할 수 없게됩니다. – skiphoppy

답변

6

다른 탭을 사용하지 않도록 설정하는 것이 좋습니다. 이는 탭에서 클릭 할 수 없다는 사용자 피드백을 제공하는 긍정적 인 효과가 있습니다. 그렇지 않으면 그들은 미친 듯이 클릭하고 왜 그들이 탭을 떠나게하지 않을지 궁금해 할 것입니다.

필수 필드가 완료되면 다시 사용하도록 설정하십시오. 모든 필드가 올바르게 설정 (또는 어떤 조건)

+1

또한 사용자가 수정해야 할 사항을 명확히하십시오. 내가 입력하는 방법을 모르겠 일부 입력을 기다리고 아무것도 모달에 붙어되고 더 많은 좌절 많은 것들을 생각할 수 없다. – TwentyMiles

+0

@TwentyMiles 그래, 난 보통 빨간색이나 노란색 필드를 강조 .. 그것을 밖으로 서있다. –

+0

이것은 나의 받아 들여진 대답이다, 그러나 나는 다른 모든 조각을 사용했다; 특히 ChadNC가 나를 setEnabledAt() 메소드 (JavaDocs를 읽는 데 상당히 능숙 함에도 불구하고 독자적으로 찾을 수는 없었습니다)에 넣었습니다. Carlos의 솔루션은 거의 저에게 효과적이었고 좋은 임시 결함을 만들었습니다 솔루션을 사용하여 기본 개념을 작동시킵니다. – skiphoppy

2

단지 JTabbedPane에 해제 JTabbedPanes. 탭이있는 창을 사용해야하기 때문에 사용자가 해당 탭에 머무르도록 강제하려는 조건에 도달하면 해당 탭을 사용하여 선택한 탭으로 설정할 것을 제안합니다.

setTabComponentAt(int index, Component component) 

또는

setSelectedIndex(int index) 

설정 사용자가 당신이 그들 할 다른 모든 탭이 setEnabledAt(int index, boolean enabled) 를 사용하여 비활성화 할 수 있습니다 원하는 무엇이든 완료 될 때까지 계속 할 수없는 것을 나타내는 플래그. 플래그를 적절히 설정하고 다른 탭을 다시 사용하려면 사용자가 필요한 것을 완료하면됩니다.

나는 그 해결책을 시도 할 시간이 없지만 그것이 효과가 있다고 생각한다.

+0

아주 멋지다! 현재 탭이 회색으로 표시되기 때문에 약간 꺼져 있지만 현재 창은 활성 상태를 유지하므로 제대로 작동합니다. 그래도 제대로 작업 할 수 있다면 개별 탭을 사용하지 않도록 설정하려고 시도 할 것이라고 생각합니다. – skiphoppy

+1

@skiphoppy - 현재 탭을 회색으로하고 싶지 않다면 @Chris 해결책으로 갈 수 있습니다 :'JTabbedPane '을 사용하십시오.setEnablebAt (int, boolean)'현재 탭을 제외한 각 탭을 비활성화합니다. –

2

당신은 사용 당신이 원하는 것을 할 JPanel의와 함께 CardLayout을 사용할 수없는 경우

pane.setEnabled(false); 

및 활성화 :

관련 문제