diff --git a/src/main/java/app/jackychu/jysrttools/ui/DraftTextsPanel.java b/src/main/java/app/jackychu/jysrttools/ui/DraftTextsPanel.java index af933fc..3044511 100644 --- a/src/main/java/app/jackychu/jysrttools/ui/DraftTextsPanel.java +++ b/src/main/java/app/jackychu/jysrttools/ui/DraftTextsPanel.java @@ -35,12 +35,15 @@ public DraftTextsPanel(JySrtTools jySrtTools) { InputMap im = subtitleTable.getInputMap(JTable.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT); KeyStroke enter = KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0); - subtitleTable.setSurrendersFocusOnKeystroke(true); - subtitleTable.getActionMap().put(im.get(enter), new AbstractAction() { - @Override + im.put(enter, "startEditing"); // Change action from "selectNextRow" to "startEditing" +// im.getParent().put(enter, "startEditing"); // Can enter edit mode. However, only focus on 字幕 cell + subtitleTable.getActionMap().put(im.get(enter), new AbstractAction() { // Redefine "startEditing" action public void actionPerformed(ActionEvent e) { int row = subtitleTable.getSelectedRow(); - subtitleTable.editCellAt(row, 3); + subtitleTable.editCellAt(row, 3, e); +// subtitleTable.editCellAt(row, 3, new KeyEvent((Component) e.getSource(), 401, e.getWhen(), +// e.getModifiers(), 10, '\n' )); + ((SubtitleCellEditor)subtitleTable.getCellEditor(row, 3)).focus(); } }); @@ -83,6 +86,8 @@ public void setSubtitles(JyDraft draft) throws JySrtToolsException { jySrtTools.getJyTextPanel().getActionPanel().enableButtons(false); } else { subtitleTable.setModel(new DraftSubtitleTableModel(draft.getDraftSubtitles())); + subtitleTable.grabFocus(); + subtitleTable.setRowSelectionInterval(0,0); jySrtTools.getJyTextPanel().getActionPanel().enableButtons(true); } setTableColumnSize(); diff --git a/src/main/java/app/jackychu/jysrttools/ui/SubtitleCellEditor.java b/src/main/java/app/jackychu/jysrttools/ui/SubtitleCellEditor.java index 105528e..7877afe 100644 --- a/src/main/java/app/jackychu/jysrttools/ui/SubtitleCellEditor.java +++ b/src/main/java/app/jackychu/jysrttools/ui/SubtitleCellEditor.java @@ -4,6 +4,11 @@ import javax.swing.*; import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.KeyEvent; +import java.awt.event.MouseEvent; +import java.util.EventObject; +import java.util.Objects; public class SubtitleCellEditor extends DefaultCellEditor { JTextField textField; @@ -13,6 +18,20 @@ public SubtitleCellEditor() { this.textField = (JTextField) this.getComponent(); } + @Override + public boolean isCellEditable(EventObject e) { + if (e instanceof MouseEvent) { + MouseEvent me = (MouseEvent) e; + return me.getClickCount() >= 2; + } else if (e instanceof KeyEvent) { + KeyEvent ke = (KeyEvent) e; + return ke.getKeyCode() == KeyEvent.VK_ENTER; + } else if (e instanceof ActionEvent) { + return Objects.equals(((ActionEvent) e).getActionCommand(), "\n"); + } + return false; + } + @Override public Object getCellEditorValue() { @@ -25,4 +44,8 @@ public Component getTableCellEditorComponent(JTable table, this.textField.setText(((Subtitle) value).getText()); return this.textField; } + + public void focus() { + this.textField.grabFocus(); + } }