JTable et JFormatedJTextField
Tout d'abord, comme sur tous forum, je me présente en ne disant que le minimum :D je suis étudiant en informatique et j'ai besoin de vos conseils.
Je suis entrain de développé un petit éditeur de texte.
C'est à dire un JTable contenant trois colonne dont la dernière un JFormatedJtextField. Pour les deux premières, un simple Renderer me suffit pour leurs utilisations. Seulement pour la troisième j'ai besoin de plusieurs choses.
On commencera par la première question
1 : Lors d'un seul clique je veux pouvoir récupérer le focus du JFormatedJTextField et pourvoir l'éditer sans aucun soucis.
Je vous fais parvenir mon code Source.
Svp, ne me dites pas "google est ton ami" ou encore "une petite recherche sur le forum" parce que sa fait deux jours que je recherche, modifie, test ce qui est sur le net et rien ne marche.
En vous remerciant d'avance.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
|
public class Editor extends JPanel {
public class TextRenderer extends JFormattedTextField implements TableCellRenderer {
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean isFocus, int row, int col) {
this.setText((String) value);
this.setBorder(null);
this.setOpaque(true);
this.validate();
return this;
}
}
private TableauModel index;
//private JTextArea editor;
private List<Integer> breakpoint;
private Map<Integer, String> code;
JTable table;
public Editor(Map<Integer, String> txt, List<Integer> liste) {
this.setLayout(new GridLayout(1, 1));
this.validate();
index = new TableauModel(new Object[1][1], new String[1], true);
breakpoint = liste;
code = txt;
table = new JTable();
}
public void init() {
//L'index des lignes et des BreakPoint
String[] titre = {"Ligne", "BreakPoint", "Editor"};
index = new TableauModel(new Object[1][2], titre, true);
table = new JTable(index);
// table.setSurrendersFocusOnKeystroke(true);
table.setOpaque(true);
table.setTableHeader(null);
// table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
table.getColumn("Ligne").setCellRenderer(new ButtonRenderer());
table.getColumn("Ligne").setMaxWidth(50);
table.getColumn("Ligne").setMinWidth(50);
table.getColumn("Ligne").setPreferredWidth(50);
table.getColumn("BreakPoint").setCellRenderer(new CellRenderer());
table.getColumn("BreakPoint").setMaxWidth(20);
table.getColumn("BreakPoint").setMinWidth(20);
table.getColumn("BreakPoint").setPreferredWidth(20);
table.getColumn("Editor").setCellEditor(new TextEditor(new JFormattedTextField()));
table.getColumn("Editor").setCellRenderer(new TextRenderer());
JScrollPane scroll = new JScrollPane(table);
scroll.setColumnHeaderView(new JLabel("Alex"));
scroll.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
scroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
this.add(scroll);
this.validate();
}
} |
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
|
public class TextEditor extends AbstractCellEditor implements TableCellEditor{
JFormattedTextField text;
public TextEditor(JFormattedTextField jf) {
text = jf;
text.addMouseListener(new MouseAdapter() {
public void mouseCliked(MouseEvent e) {
System.out.println("heeeeeere");
text.requestFocusInWindow();
}
});
text.addKeyListener(new KeyListener() {
public void keyTyped(KeyEvent e) {
throw new UnsupportedOperationException("Not supported yet.");
}
public void keyPressed(KeyEvent e) {
text.setValue(String.valueOf(e.getKeyChar()));
}
public void keyReleased(KeyEvent e) {
throw new UnsupportedOperationException("Not supported yet.");
}
});
}
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
text.setText((String) value);
return text;
}
public Object getCellEditorValue() {
return text.getValue();
}
} |