很难说出这里要问什么。这个问题模棱两可,含糊不清,不完整,过于宽泛,或者是修辞性的,不能以现在的形式得到合理的回答。有关澄清此问题以便重新打开的帮助,请访问帮助中心。8年前关门了。我希望jtable有一个特性,其中我将提供一个textfield来输入一个要从jtable中搜索的值,如果这个输入的值与jtable中的任何单元格值匹配,那么这个特定的单元格应该突出显示&单元格字体应该改为粗体。当用户在文本字段中指定值后按enter键时,这些值将匹配。我该怎么做?
woobm2wo1#
这个 JXTable 从swingx项目有内置的支持搜索表(查找 Searchable 接口)。它还允许快速创建一个使用此 Searchable 接口:the JXSearchField 和/或 JXSearchPanel .如果我没记错的话,这将涵盖你的大部分要求。可能只需要添加一些自定义代码就可以将单元格内容加粗
JXTable
Searchable
JXSearchField
JXSearchPanel
avwztpqn2#
这是解决问题的方法。代码如下:
public class JTableSearchAndHighlight extends JFrame { private JTextField searchField; private JTable table; private JPanel panel; private JScrollPane scroll; public JTableSearchAndHighlight() { initializeInventory(); } private void initializeInventory() { panel = new JPanel(); searchField = new JTextField(); panel.setLayout(null); final String[] columnNames = {"Name", "Surname", "Age"}; final Object[][] data = {{"Jhon", "Java", "23"}, {"Stupid", "Stupido", "500"}, {"Michael", "Winnie", "20"}, {"Winnie", "Thepoor", "23"}, {"Michael", "Winnie", "20"}, {"Winnie", "Thepoor", "23"}, {"Michael", "Winnie", "20"}, {"Winnie", "Thepoor", "23"}, {"Michael", "Winnie", "20"}, {"Winnie", "Thepoor", "23"}, {"Michael", "Winnie", "20"}, {"Winnie", "Thepoor", "23"}, {"Michael", "Winnie", "20"}, {"Winnie", "Thepoor", "23"}, {"Michael", "Winnie", "20"}, {"Winnie", "Thepoor", "23"}, {"Michael", "Winnie", "20"}, {"Winnie", "Thepoor", "23"}, {"Michael", "Winnie", "20"}, {"Winnie", "Thepoor", "23"}, {"Michael", "Winnie", "20"}, {"Winnie", "Thepoor", "23"}, {"Michael", "Winnie", "20"}, {"Winnie", "Thepoor", "23"}, {"Michael", "Winnie", "20"}, {"Winnie", "Thepoor", "23"}, {"Michael", "Winnie", "20"}, {"Winnie", "Thepoor", "23"}, {"Michael", "Winnie", "20"}, {"Winnie", "Thepoor", "23"}, {"Michael", "Winnie", "20"}, {"Winnie", "Thepoor", "23"}, {"Michael", "Winnie", "20"}, {"Winnie", "Thepoor", "23"}, {"Michael", "Winnie", "20"}, {"Winnie", "Thepoor", "23"}, {"Michael", "Winnie", "20"}, {"Winnie", "Thepoor", "23"}, {"Michael", "Winnie", "20"}, {"Winnie", "Thepoor", "23"}, {"Max", "Dumbass", "10"}, {"Melanie", "Martin", "500"}, {"Jollibe", "Mcdonalds", "15"}}; table = new JTable(data, columnNames); table.setColumnSelectionAllowed(true); table.setRowSelectionAllowed(true); scroll = new JScrollPane(table); scroll.setBounds(0, 200, 900, 150); searchField.setBounds(10, 100, 150, 20); searchField.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { String value = searchField.getText(); for (int row = 0; row <= table.getRowCount() - 1; row++) { for (int col = 0; col <= table.getColumnCount() - 1; col++) { if (value.equals(table.getValueAt(row, col))) { // this will automatically set the view of the scroll in the location of the value table.scrollRectToVisible(table.getCellRect(row, 0, true)); // this will automatically set the focus of the searched/selected row/value table.setRowSelectionInterval(row, row); for (int i = 0; i <= table.getColumnCount() - 1; i++) { table.getColumnModel().getColumn(i).setCellRenderer(new HighlightRenderer()); } } } } } }); panel.add(searchField); panel.add(scroll); getContentPane().add(panel); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setTitle("Inventory Window"); setSize(900, 400); setLocationRelativeTo(null); setVisible(true); } private class HighlightRenderer extends DefaultTableCellRenderer { @Override public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { // everything as usual super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); // added behavior if(row == table.getSelectedRow()) { // this will customize that kind of border that will be use to highlight a row setBorder(BorderFactory.createMatteBorder(2, 1, 2, 1, Color.BLACK)); } return this; } } public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { public void run() { new JTableSearchAndHighlight(); } }); } }
2条答案
按热度按时间woobm2wo1#
这个
JXTable
从swingx项目有内置的支持搜索表(查找Searchable
接口)。它还允许快速创建一个使用此Searchable
接口:theJXSearchField
和/或JXSearchPanel
.如果我没记错的话,这将涵盖你的大部分要求。可能只需要添加一些自定义代码就可以将单元格内容加粗
avwztpqn2#
这是解决问题的方法。代码如下: