2011-04-26 4 views
1

FlowLayout을 사용하고 많은 JButton이 포함 된 JPanel이 있습니다. 버튼은 FlowLayout에 의해 2 차원 그리드 상에 있습니다. JPanel의 크기를 조정할 수 있으며, 물론 그 때, 그리드의 버튼 위치가 변경됩니다 (물론 순서는 동일하게 유지됩니다). 사용자가 키보드의 화살표 키를 사용하여 격자에서 하나의 단추에서 다른 단추로 이동할 수있게하려고합니다.FlowLayout에서 JComponent의 인접한 이웃 확인하기

주어진 버튼에 대해 알려줄 수있는 방법이 있습니까? 현재 바로 위에있는 버튼, 바로 아래에있는 버튼, 바로 왼쪽과 오른쪽에있는 버튼은 무엇입니까?

분명히 GridLayout을 사용하는 경우이 작업은 간단하지만 다른 이유로 인해 FlowLayout을 사용해야합니다.

답변

2

왼쪽 및 오른쪽 화살표 키는 문제가되지 않습니다. jzd에서 언급했듯이 KeyStrokes를 순회 키 집합에 추가하기 만하면됩니다.

위/아래 키의 경우 사용자 지정 동작을 만들어야합니다. 현재 구성 요소의 위치를 ​​사용할 수 있습니다. 그런 다음 위로 올라가려면 10 픽셀 (구성 요소 사이의 행 간격에 5 픽셀을 추가로 5 줄)을 사용하여 Y 좌표를 변경할 수 있습니다. 그런 다음 :

Container.getComponentAt(Point p) 

을 사용하여 새 위치에서 구성 요소를 찾을 수 있습니다.

아래로 이동하려면 버튼의 위치부터 시작하여 버튼 높이에 10 픽셀을 더하십시오.

물론 Key Bindings를 사용하여 Up/Down KeyStroke를 Action에 바인딩 할 수 있습니다.

참고 : 구성 요소 위 또는 아래 구성 요소를 찾으려면 추가로 5 픽셀을 추가해야하는지 잘 모르겠습니다. 수직 간격을 사용할 수 있습니다. getComponentAt() 메서드에서 경계 검사가 어떻게 작동하는지 잘 모르겠습니다.

1

나는 단지 FlowLayout에있는 선택된 버튼을 이동하거나 이동하여 탭 또는 이동으로 제자리에있는 포커스 여행 구현을 사용할 수 있다고 생각합니다.

나는 그냥 forwardDefaultFocusTraversalKeys

더 많은 정보와 같은 세트에있는 화살표 키를 추가 할 필요가 있다고 생각 :

http://download.oracle.com/javase/tutorial/uiswing/misc/focus.html