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 18:54:59 浏览: 75
这段代码报错的原因是在以下代码中,当某一行的高度被设置为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= 和 int[] arr= 的区别
`String[] arr` 和 `int[] arr` 的区别在于它们定义的是不同类型的数组。
`String[] arr` 定义了一个字符串类型的数组,也就是说,`arr` 中的每个元素都是一个字符串对象。
`int[] arr` 定义了一个整型数组,也就是说,`arr` 中的每个元素都是一个整数。
因为不同类型的数组存储的数据类型不同,所以在使用时需要注意类型转换。例如,如果要将一个整型数组转换成字符串数组,可以使用 Java 中的 `Arrays.toString()` 方法,如下所示:
```
int[] intArr = {1, 2, 3};
String[] strArr = Arrays.toString(intArr).split("[\\[\\]]")[1].split(", ");
```
这样就可以将 `intArr` 数组中的整数转换成字符串数组 `strArr` 中的字符串了。
优化代码std::string arr = oss.str(); CString ss = arr
这段代码的问题是将一个 std::string 类型的变量转换为 CString 类型的变量,这个转换过程会涉及到字符串的拷贝和内存分配,会产生额外的开销。而且该代码没有进行任何错误处理,如果 std::ostringstream 对象 oss 的输出内容包含了不合法的字符,那么转换过程可能会失败。
如果你需要使用 CString 类型的变量,可以直接在 std::ostringstream 对象 oss 上调用成员函数 str(),该函数将返回一个 std::string 类型的变量,然后再将其转换为 CString 类型的变量,如下所示:
std::string arr = oss.str();
CString ss(arr.c_str());
阅读全文
相关推荐
















