2013-04-25 5 views
1

동일한 JTable을 가지지 만 열의 값이 다른 2 개의 JTabbedPane을 만들고 싶습니다. 지금 당장 어떤 이유로 든 탭 중 하나만 나타나고 그 이유는 확실하지 않습니다. 또한 나는이 다른 방법을 최선을 다하고 있습니다 DefaultTableModel의 두 가지를 만들어?2 개의 다른 JtabbedPane에 동일한 jtable을 만듭니다.

public static void tableMaker(DefaultTableModel m, DefaultTableModel m1, final Map<String, NumberHolder> uaCount) 
{ 
    final JFrame frame = new JFrame("Strings");  
    JPanel panel1 = new JPanel(); 
      JPanel panel2 = new JPanel(); 
    JTabbedPane tabbedPane = new JTabbedPane(); 

    m.addColumn("String"); 
    m.addColumn("Occurrences"); 
      m1.addColumn("String"); 
    m1.addColumn("Occurrences"); 
    JTable table = new JTable(m); 
      JTable table = new JTable(m1); 
    table.setAutoCreateRowSorter(true); 
    JScrollPane scrollPane1 = new JScrollPane(table1); 
      JScrollPane scrollPane2 = new JScrollPane(table2); 
    frame.getContentPane().setLayout(new BorderLayout());              
    panel1.add(scrollPane1); 
      panel2.add(scrollPane2); 
    frame.getContentPane().add(panel1, BorderLayout.CENTER); 
      frame.getContentPane().add(panel2, BorderLayout.CENTER);   
    frame.add(tabbedPane, BorderLayout.NORTH); 
    tabbedPane.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT); 
    tabbedPane.addTab("Tab 1", null, panel1, 
       "String length 2"); 
    tabbedPane.addTab("Tab 1", null, panel2, 
       "String length 2"); 
+0

나는 동일한 정보로 두 개의 탭을 갖는 목적은 무엇인가 물어 봐도 될까요? –

+0

'String' 열은 다른 정보를 갖게 될 것입니다. – user2007843

+0

그렇다면 그것은 동일한 테이블이 될 수 없다는 것을 의미합니다. 공통 정보를 중앙 집중식으로 재사용 할 수있는 일종의 결합 테이블 모델을 가질 수는 있지만 동일한 JTable이 될 수는 없습니다. –

답변

5

나는 열 중 하나의 동일한 JTable가 있지만 다른 값을 가질 것 2 JTabbedPanes을 만들려고합니다. 지금 당장 어떤 이유로 든 탭 중 하나가 나타나고 그 이유를 모르겠습니다. 또한 두 개의 다른 DefaultTableModel을 만들어서 가장 좋은 방법일까요?

  • 작성에만 JTables 각 등 다른 컬럼 모델, 렌더러를 가질 수

  • 하나의 DefaultTableModel, 모든 변경 synchonized하는

  • ,

simplest (SSCCE) code as is possible

enter image description hereenter image description here

import java.awt.BorderLayout; 
import java.awt.EventQueue; 
import javax.swing.JFrame; 
import javax.swing.JScrollPane; 
import javax.swing.JTabbedPane; 
import javax.swing.JTable; 
import javax.swing.table.DefaultTableModel; 

public class MyTabbedPane { 

    private JTabbedPane tabbedPane = new JTabbedPane(); 
    private JFrame f = new JFrame(); 
    private String[] columnNames = {"First Name", "Last Name", "Sport", 
     "# of Years", "Vegetarian"}; 
    private Object[][] data = { 
     {"Kathy", "Smith", "Snowboarding", new Integer(5), (false)}, 
     {"John", "Doe", "Rowing", new Integer(3), (true)}, 
     {"Sue", "Black", "Knitting", new Integer(2), (false)}, 
     {"Jane", "White", "Speed reading", new Integer(20), (true)}, 
     {"Joe", "Brown", "Pool", new Integer(10), (false)} 
    }; 
    private DefaultTableModel model = new DefaultTableModel(data, columnNames) { 
     private static final long serialVersionUID = 1L; 

     @Override 
     public Class getColumnClass(int column) { 
      return getValueAt(0, column).getClass(); 
     } 
    }; 

    public MyTabbedPane() { 
     tabbedPane.addTab("Tab1", new JScrollPane(new JTable(model))); 
     tabbedPane.addTab("Tab2", new JScrollPane(new JTable(model))); 
     tabbedPane.addTab("Tab3", new JScrollPane(new JTable(model))); 
     tabbedPane.addTab("Tab4", new JScrollPane(new JTable(model))); 
     tabbedPane.setTabPlacement(JTabbedPane.TOP); 
     tabbedPane.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     f.add(tabbedPane, BorderLayout.CENTER); 
     f.pack(); 
     f.setVisible(true); 
    } 

    public static void main(String args[]) { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       MyTabbedPane frame = new MyTabbedPane();  
      } 
     }); 
    } 
} 
+0

다른 탭에 다른 JTables를 사용해야합니다. 또한 tabbedPane에 1 개의 탭만 표시되는 이유는 무엇입니까? – user2007843

+0

예를 선택하고 JPanel의 기본 FlowLayout을 BorderLayout – mKorbel

+0

+1로 변경하십시오. 작은 것, 당신은''Integer.valueOf'를''new Integer'보다 더 사용해야합니다. –

관련 문제