gpt4 book ai didi

java - 如何在 JTable 中实现搜索

转载 作者:行者123 更新时间:2023-12-02 07:37:42 25 4
gpt4 key购买 nike

我希望 JTable 有一个功能,其中我将提供一个文本字段来输入要从 JTable 中搜索的值,如果输入的值与 JTable 中的任何单元格值匹配,则应突出显示该特定单元格& 单元格字体应变为粗体。当用户在文本字段中指定值后按 Enter 键时,将匹配这些值。

我该怎么做?

最佳答案

这是解决问题的一个方法。这是代码:

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();
}
});
}
}

关于java - 如何在 JTable 中实现搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12123456/

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