2011-10-16 2 views
2

아래 코드 스 니펫과 같이 ListSelectionListener를 사용하는 행 선택 만 허용하는 JTable을 보유하고 있습니다. JTable에는 두 가지 문제가 있습니다.JTable 행 선택 - 이벤트가 발생하지 않고 파란색이 표시되지 않습니다.

Q1) setSelectionRow 메서드를 사용하여 기본적으로 선택된 첫 번째 행을 설정했지만 프로그램 시작시 관련 listSelection 이벤트가 발생하지 않습니다. 첫 번째 행이 아닌 다른 행을 클릭하는 경우에만 이벤트가 발생합니다. 아래 코드를 고려하여이 문제를 해결하려면 어떻게해야합니까?

Q2) 행을 선택하면 JTable에서 파란색으로 표시되지 않습니다. ListSelectionListener를 JTable의 선택 모델에 도입 한 후에 이러한 일이 발생하기 시작했다. 리스너를 추가하기 전에 테이블을 선택했을 때이 색상 비즈니스를 만들고있었습니다. 아래의 코드 스 니펫을 고려하여 수정해야 할 사항은 무엇입니까? 고마워.

 jTableBookings = new javax.swing.JTable(); 

    jTableBookings.setModel(new MyBookingTableModel(bookingTableData)); 
    jTableBookings.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION); 
    jTableBookings.setRowSelectionAllowed(true); 
    jTableBookings.setCellSelectionEnabled(false); 

    jTableBookings.setColumnSelectionAllowed(false); 
    initColumnSizesForMinaBokBokningarJTable(jTableBookings); 

    //QUESTION 1 
    //Set selected row to first row for inital load. 
    if (jTableBookings.getModel().getRowCount() > 0) { 
     jTableBookings.setRowSelectionInterval(0, 0); 
    } 

    //QUESTION 2 
    jTableBookings.getSelectionModel().addListSelectionListener(new ListSelectionListener() { 
    public void valueChanged(ListSelectionEvent e) { 
      int sel = jTableBookings.getSelectedRow(); 
      fillBookingRecordFields(sel); //Here we do some business logic based on the selected row 
    } 
    }); 

    jScrollPane9.setViewportView(jTableBookings); 
+0

작동 빨리 게시 [SSCCE] (HTTP : //pscode.org/sscce.html). –

답변

4

1) myTable.changeSelection(row, column, false, false);

2) setCellSelectionEnabled()와 setColumnSelectionAllowed을 (해제), 더 나은 다음 도움말은

enter image description here

import java.awt.*; 
import javax.swing.*; 
import javax.swing.table.*; 

class SelectedColumnTest { 

    private JTableHeader header; 
    private Object selectedColumn = null; 
    private String[] columnNames = {"String", "Integer", "Boolean"}; 
    private Object[][] data = {{"aaa", 12, true}, {"bbb", 5, false}, {"CCC", 92, true}}; 
    private TableModel model = new DefaultTableModel(data, columnNames) { 

     private static final long serialVersionUID = 1L; 

     @Override 
     public Class<?> getColumnClass(int column) { 
      return getValueAt(0, column).getClass(); 
     } 
    }; 
    private JTable table = new JTable(model); 

    public JComponent makeUI() { 
     //table.setRowSelectionAllowed(true); 
     //table.setCellSelectionEnabled(false); 
     //table.setColumnSelectionAllowed(false); 
     JPanel p = new JPanel(new BorderLayout()); 
     p.add(new JScrollPane(table)); 
     table.setPreferredScrollableViewportSize(table.getPreferredSize()); 
     table.changeSelection(0, 0, false, false); 
     return p; 
    } 

    public static void main(String[] args) { 
     EventQueue.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       createAndShowGUI(); 
      } 
     }); 
    } 

    public static void createAndShowGUI() { 
     JFrame f = new JFrame(); 
     f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 
     f.getContentPane().add(new SelectedColumnTest().makeUI()); 
     f.pack(); 
     f.setLocationRelativeTo(null); 
     f.setVisible(true); 
    } 
} 
관련 문제