String arr[] = { "ISBN", "book name", "author", "price" }; String comm[][] = new String[row][4]; rs.next(); for (int i = 0; i < row; i++) { comm[i][0] = rs.getString("ISBN"); comm[i][1] = rs.getString("book_name"); comm[i][2] = rs.getString("author"); comm[i][3] = rs.getString("price"); rs.next(); } JTable jTable = new JTable(comm, arr); jTable.setBounds(0, 10, 980, 400); JTableHeader head = jTable.getTableHeader(); head.setPreferredSize(new Dimension(head.getWidth(), 35)); head.setFont(new Font("Arial", Font.PLAIN, 30)); jTable.setFont(new Font("Menu.font", Font.PLAIN, 20)); jTable.setRowHeight(25); JTextField filterField = new JTextField(); filterField.setBounds(10, 10, 150, 20); this.add(filterField); JButton filterButton = new JButton("Filter"); filterButton.setBounds(170, 10, 80, 20); this.add(filterButton); filterButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { String filterText = filterField.getText(); for (int i = 0; i < row; i++) { if (comm[i][1].equals(filterText)) { jTable.setRowHeight(i, 25); } else { jTable.setRowHeight(i, 0); } } } }); jTable.setPreferredScrollableViewportSize(new Dimension(800, 300));// 设置可滚动视图的大小 JScrollPane jScrollPane = new JScrollPane(jTable); jScrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); this.add(jScrollPane, BorderLayout.CENTER);// 将滚动条放到窗体 setDefaultCloseOperation(EXIT_ON_CLOSE); jTable.setVisible(true); this.setVisible(true);// 设置窗体可见 this.validate();// 设置组件可见 this.pack();// 自动调整组建大小使每个组键都能显示 this.setLocationRelativeTo(null); this.setTitle("Booklist"); this.setSize(1000, 600); this.setLayout(null); jScrollPane.setBounds(0, 70, 980, 300);// 添加这一行 这段代码为什么报错:New row height less than 1
时间: 2023-11-22 07:54:59 浏览: 74
这段代码报错的原因是在以下代码中,当某一行的高度被设置为0时,这一行将会隐藏。但是在这个逻辑中,如果过滤条件不匹配,则会将行高设置为0,这会导致某些行的高度小于1,从而在 JTable 中导致错误。
```
if (comm[i][1].equals(filterText)) {
jTable.setRowHeight(i, 25);
} else {
jTable.setRowHeight(i, 0);
}
```
要解决此问题,您可以考虑将行高设置为1而不是0,并确保在 JTable 中不会出现行高小于1的行。或者,您可以使用其他方法来隐藏不匹配的行,例如使用 TableRowSorter 过滤器。
相关问题
String arr[] = { "ISBN", "book name", "author", "price" }; String comm[][] = new String[row][4]; rs.next(); for (int i = 0; i < row; i++) { comm[i][0] = rs.getString("ISBN"); comm[i][1] = rs.getString("book_name"); comm[i][2] = rs.getString("author"); comm[i][3] = rs.getString("price"); rs.next(); } JTable jTable = new JTable(comm, arr); jTable.setBounds(0, 10, 980, 400); JTableHeader head = jTable.getTableHeader(); head.setPreferredSize(new Dimension(head.getWidth(), 35)); head.setFont(new Font("Arial", Font.PLAIN, 30)); jTable.setFont(new Font("Menu.font", Font.PLAIN, 20)); jTable.setRowHeight(25); jTable.setPreferredScrollableViewportSize(new Dimension(800, 300));// 设置可滚动视图的大小 JScrollPane jScrollPane = new JScrollPane(jTable); jScrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); this.add(jScrollPane, BorderLayout.CENTER);// 将滚动条放到窗体 setDefaultCloseOperation(EXIT_ON_CLOSE); jTable.setVisible(true); this.setVisible(true);// 设置窗体可见 this.validate();// 设置组件可见 this.pack();// 自动调整组建大小使每个组键都能显示 this.setLocationRelativeTo(null); this.setTitle("Booklist"); this.setSize(1000, 600); this.setLayout(null); jScrollPane.setBounds(0, 70, 980, 300);// 添加这一行 在这段代码中加入一个输入框和按钮点击按钮筛选出table第二行和输入内容相同的行,其他行隐藏起来
你可以在代码中添加一个文本框和一个按钮,用于输入筛选条件和触发筛选操作。然后在按钮的点击事件中,根据输入的条件筛选出需要显示的行,其他行则将其隐藏起来。
这里提供一种实现方式:
首先,在窗口中添加一个文本框和一个按钮:
```
JTextField filterField = new JTextField();
filterField.setBounds(10, 10, 150, 30);
this.add(filterField);
JButton filterButton = new JButton("Filter");
filterButton.setBounds(170, 10, 80, 30);
this.add(filterButton);
```
接着,在按钮的点击事件中实现筛选逻辑:
```
filterButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String filterText = filterField.getText();
for (int i = 0; i < row; i++) {
if (comm[i][1].equals(filterText)) {
jTable.setRowHeight(i, 25);
} else {
jTable.setRowHeight(i, 0);
}
}
}
});
```
这里假设你要筛选第二列的值与输入框中的文本相同的行。如果不同列需要筛选,可以根据列的索引号修改代码中的 `comm[i][1]`。筛选时,将需要显示的行的高度设为 25,其他行则将其高度设为 0,从而隐藏起来。
阅读全文