2D 다각형 및 물리 편집기를 작성 중이지만 하나의 기능은 관절의 회전 제한을 설정하는 것입니다.GUI 코드 외부에서 사용자 입력을 요청하는 경우,이 경우 GUI와 통신하려면 이벤트 또는 조치가 필요합니까?
사용자는이 기능을 사용하기 위해 제한을 수신해야하는 접합점 사이의 선을 클릭하고 드래그합니다.
선택이 유효한지를 결정하는 논리는 GUI 코드 외부에서 발생합니다.
선택이 발견되면 사용자가 제한을 입력 할 수있는 JOptionPane.showInputDialog
을 팝업하고 싶습니다.
내가 직접 해보면 프로그램이 응답하지 않게되고, 스레딩 때문인 것으로 판단됩니다.
GUI가 실제 GUI 구성 요소를 필요로하지 않는 이벤트 리스너를 정의 할 수있는 방법이 있습니까?
해당 구성 요소에 대한 대상 개체에 대한 참조가 포함 된 이벤트를 보낸 다음 올바른 선택이 이루어지고 사용자 입력이 필요하다는 것을 알리고 해당 이벤트의 메서드를 통해 값을 다시 보냅니다. 대상 개체.
저는 Swing에 익숙하지 않습니다. 필자의 직감은 메인 윈도우에 ActionListener
을 추가 할 수는 있지만 그 리스너를 어떻게 구체적으로 처리 할 수 있는지 모른다. 에서와 같이 특정 청취자 만 처리하는 Action
을 어떻게 정의해야합니까? 실제로 가능하다면 물론 가능합니다.
지금까지 난 단지 논리가 아닌 다른 방법으로 주위에 GUI 이야기 ...
이편집 할 리스너를 사용했다 :이 프로그램은 운동을 응답하지 내가 result = JOptionPane.showInputDialog(this,"Enter Limit.");
전화를 그 그냥 깨뜨린거야. 심지어 텍스트 상자에 아무 것도 입력하거나 닫을 수 없습니다.
일부 스레드를 일시 중지하는 모달 대화 상자를 생성하고 비 GUI 코드의 어딘가에서 호출하는 것이 그 이유입니다. 내가해야 할 일이 있지만 다른 방법을 알기에는 너무 익숙하지 않다. ...
Edit2 : 버튼을 클릭 한 후와 같이 내가 스폰하면 아무런 문제없이 JOptionPane.showInputDialog를 사용할 수 있다는 것을 추가해야한다. 또는 팝업 메뉴 옵션을 선택하십시오. 사실 그것은 내가 작업하고있는 항목의 이름을 바꾸는 방법입니다.
하지만이 시점에서 대화 상자는 GUI 스레드 또는이 이벤트 디스패처 큐에 생성되는 것으로 가정합니다.
그러나이 문제는 표시되는 대화식 GUI 구성 요소를 사용하여 해당 이벤트를 발생시키는 문제입니다. 그러나, JOptionPane.showInputDialog를 생성하는 일종의 구성 요소는 클릭 한 단추 나 컨텍스트 메뉴와 같지만 사용자와 상호 작용하지 않고 코드 대신 사용할 수 있습니다. 는 내가 보이지 않는 버튼을 사용하여 마우스 클릭 이벤트를 에뮬레이션 할 수도 있겠죠,하지만 내가 JOptionPane.showInputDialog을 산란 산란 스레드와보다 Runnable을 시도 ... 또한
꽤 해키,하지만 그건 도움이되지 않았다. GUI 소스에서 JOptionPane을 생성하지 않으면 모든 것이 멈추고 대화 상자가 작동하지 않습니다.
그래서 순서가 1) 사용자가 한 점을 클릭하고 다른 점으로 드래그합니다. 2) 모델 코드는이 두 점이 연결점을 정의하는지 확인합니다. 3) 그렇다면 UI에 숫자를 묻는 대화 상자가 표시됩니다. 4) 모델이 업데이트되고 UI가 다시 표시됩니다. 나는 그것을 정확하게 이해 했는가? UI가 반응이없는 단계는 무엇입니까? –
@Russell Zahniser가 내 게시물을 업데이트했는데, 그 내용이 어느 정도 지워졌는지 모르지만, 실제로는 거기에 속하지 않는 함수 호출처럼 보일뿐입니다. – Erius