Искать в JTable - PullRequest
       12

Искать в JTable

0 голосов
/ 14 июля 2010

Я создал с помощью Java Swing диалоговое окно, которое представляет в JTable список элементов.Я хотел бы реализовать какие-то функции поиска.Может кто-нибудь предложить мне лучший способ реализовать такую ​​функцию?

Ответы [ 3 ]

1 голос
/ 26 августа 2012

Это способ реализовать поиск в JTable:

     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();
    }
});
  }
 }
1 голос
/ 14 июля 2010

Прочтите JTable API и перейдите по ссылке на учебник по Swing в разделе «Как использовать таблицы».Там вы найдете раздел «Сортировка и фильтрация», в котором приведен пример использования текстового поля для поиска строк, содержащих указанный текст.

0 голосов
/ 11 марта 2014

Взгляните на SwingX и его JXTable.SwingX предоставляет набор компонентов, которые расширяют обычные компоненты Swing и добавляют к ним дополнительную функциональность.Моими любимыми являются MultiSplitPane (который является альтернативой JSplitPane и позволяет разделять панели на любое количество секций с изменяемым размером) и JXTable, который похож на JTable, но также имеет встроенную функцию поиска (и ограничендо Ctrl-F), и вы можете сортировать / фильтровать строки.Довольно аккуратные вещи.Все, что вам нужно сделать, это импортировать библиотеку, изменить JTable на JXTable (инициированный таким же образом) и вуаля!

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...