import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JScrollPane; 
import javax.swing.JTable; 
import javax.swing.RowFilter; 
import javax.swing.SwingUtilities; 
import javax.swing.table.DefaultTableModel; 

import java.awt.BorderLayout; 
import javax.swing.JButton; 
import java.awt.event.ActionListener; 
import java.awt.event.ActionEvent; 
import java.util.Vector; 
import javax.swing.table.TableRowSorter; 

public class Jdk9eaJTableBugFrame1 extends JFrame { 
private JPanel panel; 
private JButton btnAddRow; 
private JScrollPane scrollPane; 
private JTable table; 
private DefaultTableModel defaultTableModel; 
private TableRowSorter<DefaultTableModel> tableRowSorter; 
private RowFilter<DefaultTableModel,Integer> rowFilter; 

public static void main(String[] args) { 
SwingUtilities.invokeLater(new Runnable() { 
public void run() { 
new Jdk9eaJTableBugFrame1().setVisible(true); 
} 
}); 
} 

public Jdk9eaJTableBugFrame1() { 
initialize(); 
} 

private void initialize() { 
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
getContentPane().add(getPanel(), BorderLayout.NORTH); 
getContentPane().add(getScrollPane(), BorderLayout.CENTER); 
setSize(600,500); 
} 
private JPanel getPanel() { 
if (panel == null) { 
panel = new JPanel(); 
panel.add(getBtnAddRow()); 
} 
return panel; 
} 
private JButton getBtnAddRow() { 
if (btnAddRow == null) { 
btnAddRow = new JButton("addRow"); 
btnAddRow.addActionListener(new ActionListener() { 
public void actionPerformed(ActionEvent e) { 
getDefaultTableModel().addRow(new Vector<Object>()); 
} 
}); 
} 
return btnAddRow; 
} 
private JScrollPane getScrollPane() { 
if (scrollPane == null) { 
scrollPane = new JScrollPane(); 
scrollPane.setViewportView(getTable()); 
} 
return scrollPane; 
} 
private JTable getTable() { 
if (table == null) { 
table = new JTable(); 
//	table = new WorkroundTable(); 
table.setModel(getDefaultTableModel()); 
table.setRowSorter(getTableRowSorter()); 
} 
return table; 
} 
private DefaultTableModel getDefaultTableModel() { 
if (defaultTableModel == null) { 
defaultTableModel = new DefaultTableModel(); 
defaultTableModel.setColumnCount(5); 
} 
return defaultTableModel; 
} 
private TableRowSorter<DefaultTableModel> getTableRowSorter() { 
if (tableRowSorter == null) { 
tableRowSorter = new TableRowSorter<DefaultTableModel>(getDefaultTableModel()); 
tableRowSorter.setRowFilter(getRowFilter()); 
} 
return tableRowSorter; 
} 
private RowFilter<DefaultTableModel,Integer> getRowFilter() { 
if (rowFilter == null) { 
rowFilter = new RowFilter<DefaultTableModel,Integer>() { 
public boolean include(Entry entry) { 
return true; 
} 
}; 
} 
return rowFilter; 
} 
} 
