यदि मैं आपका प्रश्न सही ढंग से पढ़ता हूं, तो आप चाहते हैं कि उपयोगकर्ता सेल सेल एडिटर को सक्रिय किए बिना तुरंत सेल में टाइप करने में सक्षम हो, यानी, आप चाहते हैं कि जो भी कीस्ट्रोक सेल को टेक्स्ट में दर्ज किया गया पहला अक्षर बन जाए खेत।
मेरा पहला प्रयास एक संपत्ति जोड़ने के लिए था, कीबोर्ड फोकसमेनर की फोकसऑनर संपत्ति पर ध्यान दें, केवल ध्यान दें कि फोकस कभी भी जेटटेबल को नहीं छोड़ता है। आप शायद उसमें भी भाग गए। योजना बी के लिए समय बी
मुझे उस तालिका में एक KeyListener जोड़कर काम करने के लिए "पहली कीप्रेस" चीज मिल गई है जो एक उदाहरण फ़ील्ड में keyPressed() विधि के लिए अंतिम keyEvent रिकॉर्ड करता है। GetTableCellEditorComponent() विधि वहां से चरित्र को पढ़ती है। मुझे उस हैकी अनुरोध की आवश्यकता है फोकसइनविंडो() कॉल का उल्लेख है यदि उपयोगकर्ता पहले के बाद किसी भी अक्षर टाइप करना है।
मेरे नमूना ऐप के लिए, मैंने जेटीबल का एक उप-वर्ग बनाया जो कि एक कुंजीलिस्टर को स्वयं जोड़ता है। अपने सेल एडिटर इंस्टेंस को KeyListener को लागू करने और इसके बजाय नियमित जेटीबल में जोड़ने के लिए यह एक बेहतर विचार है, लेकिन मैं इसे आपके पास छोड़ दूंगा।
अपने कोड स्निपेट के रूप में मैं इसे संशोधित:
@Override
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
JPanel container = new JPanel();
container.setLayout(new BorderLayout());
container.add(field, BorderLayout.CENTER);
// Will want to add an instanceof check as well as a check on Character.isLetterOrDigit(char).
char keypressed = ((StickyKeypressTable)table).getLastKeyPressed();
field.setText(String.valueOf(keypressed));
container.add(new JButton("..."), BorderLayout.EAST);
SwingUtilities.invokeLater(new Runnable() {
public void run() {
// This needs to be in an invokeLater() to work properly
field.requestFocusInWindow();
}
});
return container;
}
जहां तक गंदगी चला जाता है के रूप में इस कहीं वहाँ Vogon काव्य के साथ बैठता है, लेकिन यह अपने तत्काल समस्या का समाधान करना चाहिए।
public boolean editCellAt(int row, int column, EventObject e)
{
if (cellEditor != null && !cellEditor.stopCellEditing())
{
return false;
}
if (row < 0 || row >= getRowCount() ||
column < 0 || column >= getColumnCount())
{
return false;
}
if (!isCellEditable(row, column))
return false;
TableCellEditor editor=getCellEditor(row, column);
if (editor != null && editor.isCellEditable(e))
{
editorComp=prepareEditor(editor, row, column);
if (editorComp == null)
{
removeEditor();
return false;
}
//aangepast
Rectangle rect=getCellRect(row, column, false);
if (datamodel_.useAdaptedEditorRect())
rect=datamodel_.changeRectangle(rect, editorComp);
editorComp.setBounds(rect);
add(editorComp);
editorComp.validate();
setCellEditor(editor);
setEditingRow(row);
setEditingColumn(column);
editor.addCellEditorListener(this);
//NEXT LINE ADDED
editorComp.requestFocus();
return true;
}
return false;
}
फिर अपने JPanel से requestFocus ओवरलोड और सुनिश्चित करें कि आपके लेख फ़ील्ड है:
हां धन्यवाद। मुझे बस सूर्य मंच पर कुछ समान सलाह मिली है। http://forums.sun.com/thread.jspa?threadID=5368525 –