Swing “显示”;找不到行“;筛选时,如果未找到条目,则在JTable行内

Swing “显示”;找不到行“;筛选时,如果未找到条目,则在JTable行内,swing,Swing,我有一个带行过滤器的JTable 一旦进行了筛选,若并没有得到任何一行,那个么我必须在表内显示一个字符串,如“并没有找到要显示的内容”,作为第一行 请做必要的事 谢谢, Narasimha如果筛选器已排除所有行,则返回的结果将为零。您可以相应地更新GUIsetToolTipText()很方便 下面是一个例子: TableModel model = ... JTable table = new JTable(model); TableRowSorter<TableModel> sort

我有一个带行过滤器的JTable

一旦进行了筛选,若并没有得到任何一行,那个么我必须在表内显示一个字符串,如“并没有找到要显示的内容”,作为第一行

请做必要的事

谢谢,
Narasimha

如果筛选器已排除所有行,则返回的结果将为零。您可以相应地更新GUI<如果屏幕空间不足,code>setToolTipText()很方便

下面是一个例子:

TableModel model = ...
JTable table = new JTable(model);
TableRowSorter<TableModel> sorter = new TableRowSorter<TableModel>(model);
table.setRowSorter(sorter);
JScrollPane pane = new JScrollPane(table);
JLabel label = new JLabel("");
...
String s = "Rows: " + sorter.getViewRowCount()
pane.setToolTipText(s);
label.setText(s);
TableModel=。。。
JTable table=新的JTable(模型);
TableRowSorter分拣机=新的TableRowSorter(型号);
表.SetRow分拣机(分拣机);
JScrollPane=新的JScrollPane(表);
JLabel标签=新的JLabel(“”);
...
字符串s=“行:”+sorter.getViewRowCount()
窗格。设置工具脚本文本;
label.setText(s);

要在多列表中显示一行文本可能非常困难,不支持span AFAIK。 一种可能是隐藏所有数据列(稍后要显示它们,您必须在某个地方记住它们),并为消息显示一列


更简单的方法是创建一个带有CardLayout的JPanel,添加两张卡——一张包含表格,另一张包含空数据警告。如果过滤器返回空结果,则显示带有空警告的卡片,在其他情况下-显示表格。

我今天需要解决这个确切的问题,但无法在线找到一个好的答案。最后我提出了自己的解决方案,我想这可能正是你想要的。我不知道这对你的项目来说是否太晚了,但也许它可以帮助其他人:

JTable.paintComponent(图形g)
将不会被调用,除非表格的高度大于0。这会导致空表出现问题,因此如果需要,我们将扩展
JTable
高度,使其始终至少与其父视图
JViewport
的大小相同

JTable tableName =  new JTable() {
  public boolean getScrollableTracksViewportHeight() {
    if(getParent() instanceof JViewport)
      return(((JViewport)getParent()).getHeight() > getPreferredSize().height);

    return super.getScrollableTracksViewportHeight();
  }

  protected void paintComponent(Graphics g) {
    super.paintComponent(g);
    if(getRowCount() == 0) {
      Graphics2D g2d = (Graphics2D) g;
      g2d.setColor(Color.BLACK);
      g2d.drawString("Nothing found to display.",10,20);
    }
  }
}

containerName.add(new JScrollPane(tableName));

@Narasimha:请使用Stockkoverflow的单一登录。虽然它没有考虑到表头的高度,但还是很好的。我认为在表为空且显示“无结果”时,通过表显示容器的颜色看起来更自然。这可以通过添加
setBackground(getParent().getBackground())来实现paintComponent()
if
子句中添加一个
else
子句和
setBackground(Color.WHITE)