2013-04-25 2 views
1

Я хочу создать 2 JTabbedPanes, которые будут иметь одинаковые JTable, но разные значения в одном из столбцов. Прямо сейчас по какой-то причине появляется только одна из вкладок, и я не знаю, почему. Также я делаю это наилучшим образом, создав 2 разных DefaultTableModel?, создавая ту же самую jtable в двух разных JtabbedPanes

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

Я хочу создать 2 JTabbedPanes, которые будут иметь один и тот же JTable, но разные значения в одном из столбцов. Прямо сейчас по какой-то причине только появляется одна из вкладок, и я не знаю, почему. Также я делаю , это лучший способ, создав 2 разных DefaultTableModel?

  • создать только один DefaultTableModel,

  • тогда все изменения синхронизированы,

  • каждый из JTable: может иметь различную ColumnModel, рендеры и т.д.

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

Да и изменить значение по умолчанию FlowLayout для JPanel в BorderLayout – mKorbel

+0

+1. Небольшая вещь, вам лучше использовать 'Integer.valueOf' над' new Integer'. –