1Danke
ERLEDIGT
NEIN
NEIN
ANTWORTEN
4
4
ZUGRIFFE
840
840
EMPFEHLEN
-
25.03.10 15:16 #1
- Registriert seit
- Aug 2007
- Ort
- Sandl (Oberösterreich)
- Beiträge
- 93
Hi!
Ich hätte wieder mal eine Frage bezüglich JTable und CellEditor.
Ich hab mit einen CellEditor geschrieben - das ganze heißt ArticleSelectionEditor und besteht aus einem Textfeld und einem Button:
Code java: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 57 58 59 60 61 62 63 64 65 66 67
public class ArticleSelectionEditor extends AbstractCellEditor implements TableCellEditor { private static final long serialVersionUID = 1L; String originalValue; JButton btnMore = new JButton(); JTextField txtField = new JTextField(); JComponent component = new JPanel(); public ArticleSelectionEditor() { btnMore.setText("..."); btnMore.setPreferredSize(new Dimension(20, 8)); btnMore.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent arg0) { ArticleSelectionDialog dlg = new ArticleSelectionDialog("Wählen Sie einen Artikel aus der Liste"); int result = dlg.showDialog(); if(result > 0) { txtField.setText(dlg.getArtikelnr()); } } }); txtField.requestFocus(); component.setLayout(new BorderLayout()); component.add(txtField, BorderLayout.CENTER); component.add(btnMore, BorderLayout.EAST); component.addFocusListener(new FocusAdapter() { @Override public void focusGained(FocusEvent arg0) { txtField.setText(originalValue); txtField.requestFocusInWindow(); txtField.selectAll(); } }); } @Override public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { originalValue = value.toString(); txtField.setText(originalValue); component.requestFocus(); return component; } @Override public Object getCellEditorValue() { try { if(DBConnection.executeQuery("SELECT productid FROM product WHERE productnr = '" + txtField.getText() + "'").next()) { return txtField.getText(); } else { JOptionPane.showMessageDialog(null, "Eingegebene Artikelnummer existiert nicht in der Datenbank!", "Falsche Eingabe", JOptionPane.ERROR_MESSAGE); } } catch (Exception e) { e.printStackTrace(); } return originalValue; }
Mein CellEditor soll nun, wenn man diesen aktiviert (öffnet - wie sagt man da?), den Text im TextFeld markieren.
Das Funktioniert an und für sich schon recht gut, nur funktionierts nicht, wenn man mit dem Fokus auf der Zelle ist und man einen Buchstaben oder eine Zahl eingibt.
Ich habe das Problem schon einmal gehabt, einen Thread aufgemacht und habs dann auch lösen können, nur steh ich jetzt wieder an, wenn es um ein Panel als Editor geht.
Danke für eure Hilfe
greez
THEJS
-
Hi,
wenn ich dich richtig verstehe, müsstest du statt dem Panel dem FocusListener zuzuweisen
einfach nur dem TextField dem Listener zuweisen
Dabei sollte es m.E. auch nicht nötig sein, nochmal den Text zu setzen...Code java:1 2 3 4 5 6
textField.addFocusListener(new FocusAdapter() { @Override public void focusGained(FocusEvent arg0) { txtField.selectAll(); } });
Grüße!
-
25.03.10 15:53 #3
- Registriert seit
- Aug 2007
- Ort
- Sandl (Oberösterreich)
- Beiträge
- 93
Danke für deine schnelle Antwort Artorius!
Aber, mein Problem ist, dass der Fokus auf dem Panel liegt (nehm ich jetzt mal an) der FocusListener aber garnicht angesprochen wird.
(Was wir ja schon mal hatten
)
Kann das sein, dass das ein BUG von Java ist? bzw. halt vom JTable oder Model?
greez
-
Ah, jetzt hats auch wieder geklingelt...
Das müsst es doch sein, oder?
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 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186
import java.awt.BorderLayout; import java.awt.Component; import java.awt.Dimension; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.FocusAdapter; import java.awt.event.FocusEvent; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import javax.swing.AbstractCellEditor; import javax.swing.JButton; import javax.swing.JComponent; import javax.swing.JPanel; import javax.swing.JTable; import javax.swing.JTextField; import javax.swing.table.DefaultTableCellRenderer; import javax.swing.table.DefaultTableModel; import javax.swing.table.TableCellEditor; /* * To change this template, choose Tools | Templates * and open the template in the editor. */ /* * TestFrame.java * * Created on 25.03.2010, 15:23:37 */ /** * * @author jw */ public class TestFrame extends javax.swing.JFrame { /** Creates new form TestFrame */ public TestFrame() { initComponents(); jTable1.getColumnModel().getColumn(0).setCellEditor(new TestEditor()); jTable1.addKeyListener(new KeyListener(){ public void keyTyped(KeyEvent ke) { } public void keyPressed(KeyEvent ke) { } public void keyReleased(KeyEvent ke) { ((TestEditor)(jTable1.getCellEditor(0,0 ))).txtField.selectAll(); ((TestEditor)(jTable1.getCellEditor(0,0 ))).txtField.requestFocus(); ((TestEditor)(jTable1.getCellEditor(0,0 ))).txtField.setText(""+ke.getKeyChar()); ke.consume(); } }); } public class TestEditor extends AbstractCellEditor implements TableCellEditor { private static final long serialVersionUID = 1L; String originalValue; JButton btnMore = new JButton(); JTextField txtField = new JTextField(); JComponent component = new JPanel(); public TestEditor() { btnMore.setText("..."); btnMore.setPreferredSize(new Dimension(20, 8)); btnMore.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent arg0) { /*ArticleSelectionDialog dlg = new ArticleSelectionDialog("Wählen Sie einen Artikel aus der Liste"); int result = dlg.showDialog(); if(result > 0) { txtField.setText(dlg.getArtikelnr()); }*/ } }); txtField.requestFocus(); component.setLayout(new BorderLayout()); component.add(txtField, BorderLayout.CENTER); component.add(btnMore, BorderLayout.EAST); txtField.addMouseListener(new MouseAdapter(){ @Override public void mouseReleased(MouseEvent e){ txtField.selectAll(); } }); } @Override public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { originalValue = value.toString(); txtField.setText(originalValue); return component; } @Override public Object getCellEditorValue() { return txtField.getText(); } } /** This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. */ @SuppressWarnings("unchecked") // <editor-fold defaultstate="collapsed" desc="Generated Code"> private void initComponents() { jScrollPane1 = new javax.swing.JScrollPane(); jTable1 = new javax.swing.JTable(); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); jTable1.setModel(new javax.swing.table.DefaultTableModel( new Object [][] { {"123", null, null, null}, {"12344", null, null, null}, {"123123123", null, null, null}, {null, null, null, null} }, new String [] { "Title 1", "Title 2", "Title 3", "Title 4" } )); jScrollPane1.setViewportView(jTable1); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() .addContainerGap(15, Short.MAX_VALUE) .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 375, javax.swing.GroupLayout.PREFERRED_SIZE) .addContainerGap()) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 275, javax.swing.GroupLayout.PREFERRED_SIZE) .addContainerGap(25, Short.MAX_VALUE)) ); pack(); }// </editor-fold> /** * @param args the command line arguments */ public static void main(String args[]) { java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new TestFrame().setVisible(true); } }); } // Variables declaration - do not modify private javax.swing.JScrollPane jScrollPane1; private javax.swing.JTable jTable1; // End of variables declaration }
-
25.03.10 17:06 #5
- Registriert seit
- Aug 2007
- Ort
- Sandl (Oberösterreich)
- Beiträge
- 93
Yeah!
Mein Held *verneigung*

greez THEJS
Ähnliche Themen
-
JFormattedTextField in einem Celleditor
Von ElJarno im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 5Letzter Beitrag: 06.05.10, 17:26 -
Probleme mit CellEditor
Von TMDolphin im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 0Letzter Beitrag: 18.01.09, 09:17 -
Problem mit eigenem CellEditor
Von TimoTH im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 2Letzter Beitrag: 11.07.07, 08:19 -
CellEditor
Von darksmilie im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 0Letzter Beitrag: 29.08.06, 16:22 -
JTable CellEditor editingCanceled
Von nils_eckert im Forum JavaAntworten: 0Letzter Beitrag: 30.01.05, 20:08





Zitieren
Login





