Java 스윙 GUI를 만들고 GridLayout을 사용하도록 JPanel의 서식을 지정했습니다. 그리드의 특정 '상자'(즉 특정 좌표)에 액세스해야하지만 이렇게 할 수는 없습니다.Java Swing Gridlayout : 특정 좌표에 액세스
누락 된 방법이 있습니까? 어떻게해야합니까?
도움 주셔서 감사합니다.
Java 스윙 GUI를 만들고 GridLayout을 사용하도록 JPanel의 서식을 지정했습니다. 그리드의 특정 '상자'(즉 특정 좌표)에 액세스해야하지만 이렇게 할 수는 없습니다.Java Swing Gridlayout : 특정 좌표에 액세스
누락 된 방법이 있습니까? 어떻게해야합니까?
도움 주셔서 감사합니다.
프로그램 데이터 (모델)에 대한 정보를 얻기 위해 GUI 코드 (보기)에 의존해서는 안됩니다. 가장 좋은 해결책은 처음부터 어느 구성 요소가 어디에 있는지를 "아는 것"입니다. 구성 요소를 보유하고있는 데이터 구조 (2D 배열)가 있어야하며, 그리드에 무언가가 추가 될 때마다 업데이트됩니다.
그래도 매우 빠르고 더러운 수정을 원하면 JPanel.getComponentAt()
으로 게임을 시작할 수 있습니다. 그래도 픽셀 좌표가 필요하기 때문에 주어진 격자 사각형이 차지하는 공간을 알아 내기 위해 리버스 엔지니어링을해야합니다. 격자 사각형 사이의 간격은 is given by your GridLayout
object입니다. 이것은 권장하지 않습니다.. 나는 그것을 완전성의 관심사로 포함시키고있다. (그리고 그것은 당신의 질문에 대한보다 문자적인 반응이기 때문에).
좋아, 내가 뭘 잘못하고 있었는지 알 것 같아. X의 격자를 채우기 위해 JLabels를 추가하고 플레이어가 X의 숫자를 특정 좌표로 맞추는 것으로 추측했습니다. 그래도 JLabel을 어떤 데이터 구조에도 저장하지 못했습니다. 나는 그것을 지금 시험해 볼 것이다, 감사합니다! – kubasub
@KubaSub, JLabels를 저장하지 마십시오 ... 모델과 뷰를 다시 혼합합니다. GUI없이 게임을 플레이 할 수있게 만든 다음 GUI를 게임에 추가하면 UI 구성 요소를 데이터 또는 데이터 저장소로 사용하려는 유혹을받지 않게됩니다. – Paul
@ Paul은 좋은 지적을 제기합니다. 이 [MCV 예제] (http://stackoverflow.com/a/3072979/230513)도 참조하십시오. – trashgod
GridLayout
에서 "컨테이너는 동일한 크기의 사각형으로 나뉩니다." 공백으로 표시하려는 장소에 비어있는 투명한 구성 요소를 추가 할 수 있습니다 (예 : . GridBagLayout
및 Using Layout Managers도 참조하십시오.
토글 버튼 격자를 사용하는 [game] (http://sites.google.com/site/drjohnbmatthews/buttons)에서 아이디어를 얻을 수 있습니다. – trashgod
[Towers of Hanoi] (http://stackoverflow.com/questions/7747691/solving-recursive-towers-of-hanoi-in-lisp)에 대한보기를 작성할 가능성이 있습니까? – trashgod
* ""그리드의 특정 "상자"(즉, 특정 좌표)에 액세스해야합니다. "* 1) 최종 사용자에게 제공되는 프로그램 기능은 무엇입니까? 그리드의 셀에 무엇이 있습니까? –
@trashgod 아니 하노이 타워스에서 일하는 것이 아닙니다. 게임용 GUI를 만들고 있지만. – kubasub