2016-12-28 1 views
1

알고 싶습니다. JScrollPaneJTextArea 안에 어떻게 캐스팅 할 수 있습니까?JScrollPane 캐스팅

기본적으로 텍스트 영역이며 스크롤 패인이 안에 있습니다. 내가 만들고, 마지막 코드

JTextArea txtarea = new JTextArea(); 
JScrollPane scroll = new JScrollPane(txtarea, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); 

JTabbedPane tabbed = new JTabbedPane(); 
tabbed.addTab("Text", null, scroll, "Text");  


savebutton.addActionListener(new ActionListener(){ 
public void actionPerformed(ActionEvent A){ 
txtarea = (JtextArea) tabbed.getSelecetedComponent(); 
JFileChooser chooser = new JFileChooser(); 
chooser.showSaveDialog(null);}}); 

:

여기 내 코드의 일부를 넣어 텍스트 영역을, 그리고 추가 : 창을 스크롤합니다. 모두 괜찮습니다. 그러나 텍스트 영역을 추가하는 JTabbedPane을 만들었지 만, 스크롤 창을 배치하는 방법 : 탭에 스크롤 창을 배치해야합니다.

어떻게 말 했나요?

JScrollPane cannot be cast to javax.swing.JTextArea... 

당신이 나를 도와, 또는이 문제를 해결하는 방법에 대한 아이디어를 줄 수, 모두 여기 괜찮지 만, 콘솔에 나는라는 예외가? 이 도움이 될 것입니다

+2

는 모든 관련 코드를 게시하고이 [mcve] – ItamarG3

+0

당신이 게시 한 코드에 문제가있는 것 같지 않습니다 주시기 바랍니다. 'ClassCastException'을 throw하는 정확한 행을 지적 할 수 있습니까? 나는 예외없이 텍스트로 탭 영역의 텍스트 영역을 완벽하게 렌더링 할 수있었습니다. – anacron

+2

또한 Java에서 * Casting * Object를 다른 개념으로 구현할 수 없다는 것을 이해해야합니다. 참조 만 캐스팅 될 수 있습니다. 따라서이 ClassCastException이 표시되면 코드에 불법 캐스트가 코딩되었음을 의미합니다. 그러나 명확하게, 그 코드 조각은 귀하의 질문에 게시되지 않습니다. – anacron

답변

2

희망 :

txtarea = (JTextArea) ((JScrollPane)tabbed.getSelectedComponent()).getViewport().getView(); 
+0

정말 고맙습니다. "비슷한", puting, scroll = (JScrollPane) tabbed.getSelectedComponent(); 그러나 뷰포트를 변수로 생성하면, ViewPort v = 새로운 ViewPort (스크롤); 하지만 아무런 효과가 없었고 더 많은 예외가 나타났습니다. 어쨌든, 코드 작업으로 감사드립니다. 2 번 연속으로 캐스팅 할 수 있는지 몰랐습니다. 하지만 시간 내 주셔서 감사합니다. 정말로 감사드립니다. 안부 : –

+0

@SthatycSoul. '네가 줄을 따라 2 번 캐스팅 할 줄은 몰랐다 '- 어쩌면 할 수 있겠지만, 별도의 줄에 하나의 문장으로 코드를 작성하는 것이 훨씬 쉽다. 특히 디버거를 사용할 때 코드를 디버그하는 것이 훨씬 쉬워집니다. 모든 코드를 한 줄에 넣지 않고 유지 보수 가능한 코드를 작성하기위한 포인트를 얻습니다. 그래서 두 문장으로 코드를 작성하십시오. 1) 탭에서 스크롤 패널을 가져옵니다. 2) 뷰포트에서 텍스트 영역을 가져옵니다. 또한 문제가 해결되었음을 사람들이 알 수 있도록 체크 표시를 클릭하여 답변을 "수락"하는 것을 잊지 마십시오. – camickr