【问题标题】:displaying multiple rows jtable based on search text根据搜索文本显示多行 jtable
【发布时间】:2012-11-20 10:17:44
【问题描述】:
  1. 我有一张员工考勤记录表,例如:
  2. 列标题将是一个月的日期,从 1/11、2/11、3/11 到 30/11 的顺序为 1/11、2/11、3/11
  3. 第 0 行 --> 员工姓名 - 员工 ID
  4. 第 1 行 --> 开始时间
  5. 第 2 行 --> 结束时间
  6. 第 3 行 --> 插入
  7. 第 4 行 --> 爆发
  8. 第 5 行 --> 员工姓名 - 员工 ID
    ...

  9. 如果我在搜索框中输入员工姓名,员工姓名所在的行

  10. 出现在上面的情况下它是第0行。但我需要显示四个连续的
  11. rows 也是该员工的详细信息。

  12. 我们有什么办法可以做到这一点吗?

【问题讨论】:

  • “我们有什么办法可以做到这一点。” 你能在句子的开头使用 shift 键并在问题中添加句号吗?那我也许能读懂..
  • 这听起来不像是一张普通的桌子。您是否考虑过使用可能更适合此的 SwingX 项目的JXTreeTable。使用返回多行组件的自定义渲染器,即使是 JList 听起来也更好
  • 这是一个常规的 JTable。对于每个员工,我想显示属于该员工的所有行

标签: java swing jtable


【解决方案1】:

以下是如何进行的概述:

  • 创建JTableemployeedetail 的两个实例。

  • employee 通过setSelectionMode() 使用SINGLE_SELECTION 作为其ListSelectionModel

  • detailTableModel包含一个从employee接收事件的ListSelectionListener,如相关example所示。

  • 要在detail中显示选中的employee数据,detailTableModel可以扩展AbstractTableModelfireTableDataChanged()

例如,

employee.getSelectionModel().addListSelectionListener(
        new ListSelectionListener() {

    @Override
    public void valueChanged(ListSelectionEvent e) {
        if (!e.getValueIsAdjusting()) {
            // update the detail table model based on the selected employee
            fireTableDataChanged();
        }
    }
});

【讨论】:

  • 您好,您的回答让我想到了找到解决方案。我没有创建两个表实例,而是创建了两个表模型。最初,该表设置为包含所有记录的 tablemodel1。单击搜索按钮时,我得到了与搜索文本匹配的行。然后在循环中检索行,因为所有员工每个都有 13 条记录。 tablemodel2 仅保存搜索到的员工详细信息。循环退出后,我为表设置了 tablemodel2。现在我添加了另一个按钮清除搜索,它将再次分配包含所有记录的 tablemodel1
  • 当然可以更换模型,如图here。另见Sorting and Filtering。您可以编辑您的问题以包含一个 sscce 显示您的方法,或者您可以 answer your own question。无论哪种方式,您都可以通过点击左侧的empty check mark 来接受答案。
【解决方案2】:

如果我理解正确的话。如果您搜索具有员工姓名(例如)的员工,则显示与该员工相关的行必须发生。

AFAIK 只有在它们之间保持某种链接时才能显示这些行。因为表行中的每个 Employee 数据只是与其他行一样的一行。因此,使用属性创建一个Employee class,当用户使用EmpName 查询时,检索该员工的所有详细信息。

但就设计而言,我认为您应该更喜欢为每个员工提供每一行,而不是在一行中给出所有员工姓名或在一行中给出所有开始时间。因为在不知道它们究竟代表什么的情况下查看细节会令人困惑。

这只是我的理解和建议。如果我错了,请纠正我。

【讨论】:

  • 每行单个员工+1;第二个表格可以显示所选员工的详细信息,如建议here
  • 并非所有员工姓名都在一行中。第 0 列将包含我之前提到的静态字符串 value(0,0) 将是 employeename value(0,1) 将是开始时间 value(0,2) 将是结束时间等等,直到 val(0, 13) 然后 val(0,14) 将有第二个员工姓名,直到 valu(0,26) 并继续。 col 1 将 jan1 col2 将 jan2 依此类推,具体取决于所选日期。
猜你喜欢
  • 2012-03-19
  • 1970-01-01
  • 1970-01-01
  • 2020-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多