gpt4 book ai didi

java - 使用自动完成时防止选择 JTable 中的下一个单元格

转载 作者:行者123 更新时间:2023-12-02 08:35:44 24 4
gpt4 key购买 nike

我使用下面的代码在 JTable 中使用 GlazedList 的 autoComplete 支持

itemColumn.setCellEditor(AutoCompleteSupport.createTableCellEditor(itemList));

如果用户未在单元格编辑器中选择任何值,如何阻止选择或编辑下一个单元格。

最佳答案

这种类型的功能直接内置在编辑器中,您需要重写 stopCellEditing(...) 方法以防止编辑器失去焦点。像这样的东西:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.text.*;
import javax.swing.event.*;
import javax.swing.border.*;
import javax.swing.table.*;

public class TableEdit extends JFrame
{
TableEdit()
{
JTable table = new JTable(5,5);
table.setPreferredScrollableViewportSize(table.getPreferredSize());

JScrollPane scrollpane = new JScrollPane(table);
getContentPane().add(scrollpane);

// Use a custom editor

TableCellEditor fce = new FiveCharacterEditor();
table.setDefaultEditor(Object.class, fce);
}

class FiveCharacterEditor extends DefaultCellEditor
{
FiveCharacterEditor()
{
super( new JTextField() );
}

public boolean stopCellEditing()
{
try
{
String editingValue = (String)getCellEditorValue();

if(editingValue.length() != 5)
{
JTextField textField = (JTextField)getComponent();
textField.setBorder(new LineBorder(Color.red));
textField.selectAll();
textField.requestFocusInWindow();

JOptionPane.showMessageDialog(
null,
"Please enter string with 5 letters.",
"Alert!",JOptionPane.ERROR_MESSAGE);
return false;
}
}
catch(ClassCastException exception)
{
return false;
}

return super.stopCellEditing();
}

public Component getTableCellEditorComponent(
JTable table, Object value, boolean isSelected, int row, int column)
{
Component c = super.getTableCellEditorComponent(
table, value, isSelected, row, column);
((JComponent)c).setBorder(new LineBorder(Color.black));

return c;
}

}

public static void main(String [] args)
{
JFrame frame = new TableEdit();
frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
frame.pack();
frame.setLocationRelativeTo( null );
frame.setVisible(true);
}
}

关于java - 使用自动完成时防止选择 JTable 中的下一个单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1869509/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com