2012-07-21 2 views
0

각 탭에 JPanel이있는 JTabbedPane을 추가했습니다. 각 JPanel 내의 JText 영역. 탭을 동일한 템플릿에 동적으로 만들 수 있습니다.TabbedPane에서 TextArea 사용

메뉴가있는 메뉴 막대도 있습니다. 그것은 문자열의 출현을 대체 할 옵션이 있습니다 (예 : "<"을 "<"으로 바꿉니다). JPanel과 textArea를 사용했을 때 완벽하게 작동했습니다. 내가 탭 구획을 추가 근래 이제

는 ... 난

는 내가 선택한 구성 요소 (getSelectedComponent() 메소드와 getComponentAt을 (점점 시도 .. 혼자 활성 탭의 내용을 교체하는 방법을 잘 모릅니다) 방법)과 텍스트를 대체하는 것은 .. 내가

어떤 사람이 나를

+2

문제를 보여주는 [SSCCE] (http://sscce.org/)을 게시하시기 바랍니다. – tenorsax

답변

8

getSelectedIndex()getSelectedComponent() 작업을해야 도움이 될 수 있습니다 작동 didnt한다. 자습서 How to Use Tabbed Panes을 확인하십시오. 좋은 예가 있습니다.

편집 : getSelectedComponent의 데모 및 AbstractAction

import javax.swing.AbstractAction; 
import javax.swing.JMenu; 
import javax.swing.JMenuBar; 
import javax.swing.JMenuItem; 
import javax.swing.JOptionPane; 
import javax.swing.JScrollPane; 
import javax.swing.JTabbedPane; 
import javax.swing.JPanel; 
import javax.swing.JFrame; 
import javax.swing.JTextArea; 
import javax.swing.SwingUtilities; 
import java.awt.BorderLayout; 
import java.awt.event.ActionEvent; 

public class TabbedPaneDemo { 

    static class TextDemoPanel extends JPanel{ 
     private JTextArea textArea; 

     public TextDemoPanel(String text){ 
      textArea = new JTextArea(5, 20); 
      textArea.setText(text); 
      JScrollPane scrollPane = new JScrollPane(textArea); 

      add(scrollPane); 
     } 

     public JTextArea getTextArea() { 
      return textArea; 
     } 
    } 

    static class SetTextAction extends AbstractAction { 
     private JTabbedPane tabbedPane; 

     public SetTextAction(JTabbedPane tabbedPane){ 
      super("Set text"); 
      this.tabbedPane = tabbedPane; 
     } 

     @Override 
     public void actionPerformed(ActionEvent e) { 
      String value = JOptionPane.showInputDialog(tabbedPane, "Text", "New text"); 
      if (value != null){ 
       TextDemoPanel panel = (TextDemoPanel)tabbedPane.getSelectedComponent(); 
       if (panel != null) 
        panel.getTextArea().setText(value); 
      } 
     } 
    } 

    private static void createAndShowGUI() { 
     JFrame frame = new JFrame("TabbedPaneDemo"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     JTabbedPane tabbedPane = new JTabbedPane(); 

     tabbedPane.addTab("Tab 1", new TextDemoPanel("Tab 1 text")); 
     tabbedPane.addTab("Tab 2", new TextDemoPanel("Tab 2 text")); 
     tabbedPane.addTab("Tab 3", new TextDemoPanel("Tab 3 text")); 

     frame.add(tabbedPane, BorderLayout.CENTER); 

     JMenuBar menuBar = new JMenuBar(); 
     JMenu menu = new JMenu("Menu"); 
     menuBar.add(menu); 
     JMenuItem item = new JMenuItem(new SetTextAction(tabbedPane)); 

     menu.add(item); 

     frame.setJMenuBar(menuBar); 

     frame.pack(); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
       createAndShowGUI(); 
      } 
     }); 
    } 
} 
+1

+1 기능을 캡슐화하려면 ['Action'] (http://docs.oracle.com/javase/tutorial/uiswing/misc/action.html)도 고려하십시오. – trashgod

+0

getSelectedComponent는 탭의 최상위 구성 요소를 리턴합니다. 이 훌륭한 데모에서는 JScrollPane이됩니다. 그런 다음 자신으로부터 JTextArea를 직접 추출해야합니다. – MadProgrammer

+0

@MadProgrammer는 위 코드에서 실제로 'TextDemoPanel'을 반환합니다. – tenorsax