Ich habe eine Methode implementiert, so dass Benutzereingaben auf Dezimalformat gesetzt werden. Aber es gibt zwei Formen der Bearbeitung von JTable-Zellen (?).JTable edting mode
In einem von ihnen (erstes Bild), wenn der Benutzer einfach eine Zelle auswählt und zu schreiben beginnt, funktioniert mein Zellen-Editor nicht.
Aber in der anderen, wenn es doppelt auf die Zelle klickt der Editor.
Es gibt eine Möglichkeit, die Bearbeitung nur zuzulassen, wenn der Benutzer doppelt klickt?
PS .: isCellEditable und setClickCountToStart hat nicht funktioniert.
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;
}
}
ändert Mein Editor den Text der Zelle als etwas Benutzertypen. Zellen sollten bei 0,00 beginnen, und wenn Benutzer Typ 1 geht es zu 0,01, und so weiter, also wenn er 1 und 2 gibt, wird es 0,12, für 1,2 und 3 wird es 1,23. Es funktioniert gut, wenn der Benutzer auf die Zelle doppelklickt. –
@FelipeHogrefeBento, und ich gab Ihnen 3 mögliche Lösungen. – camickr
Aber wie kann eine Zelle auf zwei Arten bearbeitet werden? –