I've implemented a method so user inputs are set to decimal format. But it there's two forms of editing JTable cells (?).
In one of them (first pic) when the user simply selects a cell and start writing my Cell Editor doesn't work.
But in the other, when it double clicks the cell the editor works.
There's a way to allow editing only when the user double clicks?
PS.: isCellEditable and setClickCountToStart didn't work.
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
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.border.EmptyBorder;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumn;
public class example extends JFrame {
private JPanel contentPane;
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
example frame = new example();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
public example() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
contentPane.setLayout(new BorderLayout(0, 0));
setContentPane(contentPane);
JTable table = new JTable(new DefaultTableModel(new Object[]{"RB"}, 10));
table.setPreferredScrollableViewportSize(new Dimension(700, 350));
TableColumn RBColumn = table.getColumnModel().getColumn(0);
RBColumn.setCellEditor(new DefaultCellEditor(tfMon()));
JScrollPane scrollPane = new JScrollPane(table);
contentPane.add(scrollPane, BorderLayout.CENTER);
}
private JTextField tfMon(){
JTextField tf = new JTextField();
tf.addKeyListener(new KeyAdapter() {
public void keyTyped(KeyEvent e) {
char c = e.getKeyChar();
if (!((c >= '0') && (c <= '9') || (c == KeyEvent.VK_BACK_SPACE) || (c == KeyEvent.VK_DELETE))){
e.consume();
}else{
String txt = tf.getText();
txt = txt.replace(".","").replace("0","");
if(!((c == KeyEvent.VK_BACK_SPACE) || (c == KeyEvent.VK_DELETE))){
e.consume();
txt=txt+c;
}
while(txt.length()<3){
txt="0"+txt;
}
txt = txt.substring(0,txt.length()-2)+"."+txt.substring(txt.length()-2,txt.length());
tf.setText(txt);
}
}
});
return tf;
}
}