2012-05-03 4 views
0

JComboBox 드롭 다운 목록에서 값을 설정하려면 JTable의 첫 번째 열의 내용을 사용해야합니다. JTable이 다른 Form (JFrame)에있어, 비공개 JComboBox에 직접 액세스 할 수없는 것이 문제입니다. JTable Form에서 JComboBox Form으로 신호 및/또는 이벤트를 보내서 드롭 다운 내용을 업데이트해야한다는 것을 알 수 있습니까? 나는 데이터에 대해 걱정하지 않는다. 공개 String []이나 뭔가를 만들 수는 있지만 JComboBox에 업데이트 자체를 필요하다고 알리는 방법은 무엇일까?다른 폼에서 컨트롤을 수정하는 방법은 무엇입니까?

+0

jframe 외부에서 콤보 박스에 액세스해야하는 경우 공개로 설정하십시오. 더 나은 방법은 그 값을 반환하는 공용 메서드를 추가하는 것입니다. – SJuan76

+0

JComboBox를 공개하지 않는 것 같습니다. 넷빈 팔레트에서 사용한 스윙 컨트롤입니다. JComboBox 모델을 변경하려는 공용 메서드를 반환하려고했지만 컴파일러에서 정적이 아닌 변수 (JComboBox)를 정적 컨텍스트의 참조가 될 수 없다는 불만을 제기했습니다. – jacknad

+0

콤보 상자에 리스너를 추가하고 상태를 업데이트 할 수 있습니다. – SJuan76

답변

3

는 I는 JComboBox 드롭 다운 목록에서 값 설정 JTable 첫 열의 내용을 사용할 필요가있다. 문제는 JTable이 다른 양식 (JFrame)이므로 JComboBox 개인에 직접 액세스 할 수 없기 때문입니다.

그리고 왜 JComboBoxJTable은 서로 액세스해야합니까? 그것들은 단지 뷰 구성 요소입니다. 표를 표시하지 않고 (예 : 테스트 중) 콤보 상자를 표시하려면 어떻게됩니까? JTable에서 직접 데이터를 검색하는 경우 심각한 문제가 있습니다. JTable을 만들었을 때 JTable의 실제 데이터가 포함 된 TableModel이있었습니다. 공유되어야하는 모델 (또는 적어도 해당 모델의 데이터)입니다.

그래서 콤보 박스의 모델과 테이블의 모델이 같은 데이터를 공유하게되면 모든 것이 잘 될 것입니다.

+0

당신이 말하는 말이 정확합니다. 테이블 데이터는 파일에 저장됩니다. 하지만 사용자가 테이블을 변경할 때 콤보 상자의 내용을 업데이트하는 방법이 필요했습니다. 표가 포함 된 양식은 변경해야 할 때만 일반적으로 표시되지 않습니다. 표에 대한 변경 사항은 comboBox가 업데이트 할 수있는 파일에 저장되지만 comboBox는 업데이트시기를 알아야합니다. ActionListener 자습서를 찾으려고하는데 페이지가 누락되었습니다 (http://docs.oracle.com/javase/tutorial/post1.0/ui/eventmodel.html). – jacknad

+1

@jacknad'TableModel'은 데이터가 변경되었을 때 이벤트를 발생시킵니다. 해당 모델에 리스너를 추가 할 수 있습니다. – Robin

+0

원래 답변으로 돌아가서 나는 콤보 박스와 테이블이 동일한 데이터를 공유하도록 할 것입니다. 이제는 공유 된 데이터로 콤보 박스를 수정하는 방법을 알아야합니다.하지만 다른 문제입니다. 대단히 감사합니다. – jacknad

2

스윙 MVC 모델은 모델 개체를 업데이트해야한다고 말합니다. JComboBox가 다시 표시되면 새 모델 값이 표시됩니다.

+0

모델 개체는 비공개입니다. JComboBox가 모델을 다른 폼에서 업데이트해야한다는 것을 어떻게 알리려고합니까? – jacknad

+1

모델은 UI 요소를 통해 공유되어야합니다. 표시해야 할 정보를 제공해야합니다. – duffymo

관련 문제