كيفية السيطرة على التركيز في JTable
-
05-07-2019 - |
سؤال
ما أريد القيام به هو عندما المستخدم التحرير الانتهاء من البيانات في خلية جدول لنقل التركيز إلى خلية أخرى حسب ما دخل المستخدم، وتتحول تلك الخلية في وضع التحرير بحيث يمكن للمستخدم بدء كتابة على الفور مع أي إجراء إضافي. يمكن بهذه الطريقة المستعمل يركز على عمله والبرنامج سوف تفعل "التفكير" حول الخلية التي يجب أن تعدل المقبل.
ومهمة بسيطة التي لا تبدو في غاية البساطة في الحياة الحقيقية ... أي شخص فكرة؟
المحلول
يرجى محاولة هذا المثال.
وينبغي أن تتيح لك التنقل من خلال جدول بإدخال القيم ش، د، ل، ص لأعلى، أسفل، يسار، يمين.
ونأمل أن هذا سوف تعطيك فكرة عن كيفية القيام بذلك.
import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.JFrame;
import javax.swing.JTable;
import javax.swing.KeyStroke;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;
public class Test extends JFrame {
private JTable table;
private TableModel tableModel;
public Test() {
tableModel = new DefaultTableModel(5, 5);
table = new JTable(tableModel);
table.setColumnSelectionAllowed(true);
getContentPane().add(table);
Action handleEnter = new AbstractAction() {
public void actionPerformed(ActionEvent e) {
table.getCellEditor().stopCellEditing(); // store user input
int row = table.getSelectedRow();
int col = table.getSelectedColumn();
String val = String.valueOf(table.getValueAt(row, col)).toLowerCase();
if (val.equals("u"))
--row;
else if (val.equals("d"))
++row;
else if (val.equals("l"))
--col;
else if (val.equals("r"))
++col;
if ( row >= 0 && row < tableModel.getRowCount()
&& col >= 0 && col < tableModel.getColumnCount()) {
table.changeSelection(row, col, false, false);
table.editCellAt(row, col);
}
}
};
// replace action for ENTER, since next row would be selected automatically
table.getInputMap().put(KeyStroke.getKeyStroke("ENTER"), "handleEnter");
table.getActionMap().put("handleEnter", handleEnter);
}
public static void main(String[] args) {
Test test = new Test();
test.setSize(800, 600);
test.setVisible(true);
}
}
نصائح أخرى
ويجب عليك إضافة KeyListener إلى JTable للحصول على كل حرف كتبته. بعد يضغط المستخدم أدخل ، يجب عليك التحقق من كلمة تمت كتابة المستخدم.
وكتابة FocusTraversalPolicy
بنفسك لتعيينها إلى الجدول
table.setFocusTraversalPolicy(policy)
ووFocusTraversalPolicy
يصف المكون الذي يحصل على التركيز المقبل.
بعد ذلك يمكنك الاتصال ب
FocusManager.getCurrentManager().focusNextComponent();
وتحرير: لم أكن اختبار هذا، انها مجرد فكرة