편집 할 수있는 JTables의 편집기에서 편집을 시작할 때 셀의 모든 텍스트를 선택하고 싶습니다. TableCellEditor.getTableCellEditorComponent 메서드에서 반환되는 구성 요소에서 JTextComponent.selectAll()을 호출하는 두 가지 방법을 시도했습니다. 내가 시도한 것들 중 아무 것도 일하지 않았다.편집 할 때 JTable 셀의 모든 텍스트를 선택하는 방법
최근 시도에서 selectAll 메서드를 호출하는 사용자 지정 TableCellEditor를 사용하도록 Swing 자습서에서 SimpleTableDemo 클래스를 변경했습니다. 디버거에서 selectAll() 메서드를 호출하는 것을 볼 수 있지만 셀의 텍스트를 선택하지 않고 테이블을 여전히 편집 모드로 전환합니다 (또는 선택 영역이 표시되기 전에 선택 취소되어있을 수 있습니다). 그 코드는 아래와 같습니다. 아무도 내가 잘못 가고 있다고 말할 수 있습니까?
import javax.swing.DefaultCellEditor; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.JTextField; import javax.swing.JTree; import javax.swing.table.TableColumn; import javax.swing.table.TableColumnModel; import javax.swing.text.JTextComponent; import java.awt.Component; import java.awt.Dimension; import java.awt.GridLayout; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; public class SimpleTableDemo extends JPanel { private boolean DEBUG = false; public SimpleTableDemo() { super(new GridLayout(1,0)); String[] columnNames = {"First Name", "Last Name", "Sport", "# of Years", "Vegetarian"}; Object[][] data = { {"Kathy", "Smith", "Snowboarding", new Integer(5), new Boolean(false)}, {"John", "Doe", "Rowing", new Integer(3), new Boolean(true)}, {"Sue", "Black", "Knitting", new Integer(2), new Boolean(false)}, {"Jane", "White", "Speed reading", new Integer(20), new Boolean(true)}, {"Joe", "Brown", "Pool", new Integer(10), new Boolean(false)} }; final JTable table = new SelectingTable(data, columnNames); table.setPreferredScrollableViewportSize(new Dimension(500, 70)); table.setFillsViewportHeight(true); if (DEBUG) { table.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e) { printDebugData(table); } }); } //Create the scroll pane and add the table to it. JScrollPane scrollPane = new JScrollPane(table); //Add the scroll pane to this panel. add(scrollPane); } private void printDebugData(JTable table) { int numRows = table.getRowCount(); int numCols = table.getColumnCount(); javax.swing.table.TableModel model = table.getModel(); System.out.println("Value of data: "); for (int i=0; i
감사합니다. 나는 그 선택이 끝난 것을 볼 수 있었고, 아마도 그 후 아마도 제거되었을 것이라고 나는 생각했다. awt 쓰레드에 다른 runnable을 두어 마지막으로 실행될 것이라고 생각하지 않았습니다. 귀하의 RXTable에서 잠깐 살펴 보았는데 흥미로운 것 같습니다. 필자의 목표는 자주 사용하기를 기대하는 일부 속성을 기본 테이블 클래스에 제공하는 것이며, 아마도 RXTable과 매우 흡사하게 될 것입니다. 다시 한번 감사드립니다. – user564874
좋은 답변입니다. selectAll이 작동하지 않는 이유를 파악하는 데 어려움을 겪고있었습니다. 핵심은 마지막 마우스 클릭이 텍스트 편집기로 이동 한 다음 마지막 마우스 클릭이 처리 된 후 selectAll()이 호출되는지 확인하는 것입니다. –
답장을 보내 주셔서 감사합니다. 나 자신을 구현하는 데 많은 어려움이 있었다. – flash