0

我有一个关于为学校编程时出现的问题的问题。

我们想做一个总结,从周一到周日,一个小公司的老板可以在哪里看到他的员工,他可以在哪里为这些人分配时段。为此,我们使用了 JTable。在每个单元格中,我们希望实现一个包含时段(早上、下午、晚上)的组合框。

因此,当单击一个单元格时,我们希望能够单击显示的组合框,选择一个时段,然后我们希望能够将名称、他们指定的日期和日期放入数据库中. (现在,将它们放入变量或任何东西都可以,我们将自己放入数据库中。)

这是到目前为止我们的 GUI 的屏幕截图: Link to our GUI

到目前为止,一切都很好。我们并没有真正在 GUI 的外观上付出任何努力,所以在我们专注于功能时请多多包涵 =)。我们唯一的问题是我们需要程序知道哪个日期和哪个人与正在更改的 cel 相关联,以便我们可以将姓名、日期和新的时段放入数据库中。

我们尝试了这个:当您单击列表中的 cel 时,我们使用了 clicklisteren。我们在该方法中放置了一些代码,它能够看到坐标,从而获得名称和日期。那行得通。然后我们尝试实现组合框。我们在那里也取得了成功。但是,当 cel 变成组合框时,将不再使用 click 方法。

所以这是我们的问题:这是获得我们想要的东西的正确方法吗?如果是这样,我们如何修复列表,以便在更改组合框时能够找出名称和日期,以便将其放入数据库中?如果不是,我们应该改变什么?我们应该使用什么样的其他侦听器或其他代码来实现我们的目标?

这是我们的一些代码:

    private javax.swing.table.DefaultTableModel model; //table model instantieren --teminste, straks.
    model = new javax.swing.table.DefaultTableModel(); //Hier wordt de tabel gedefinieerd.


    //We make the columns here:
    model.addColumn("Naam werknemer:");                                    
    model.addColumn("Maandag");
    model.addColumn("Dinsdag");
    model.addColumn("Woensdag");
    model.addColumn("Donderdag");
    model.addColumn("Vrijdag");
    model.addColumn("Zaterdag");
    model.addColumn("Zondag");

    //We make the combobox here:
    myCombo = new JComboBox(); 
    myCombo.addItem("-"); //not planned
    myCombo.addItem("ochtend"); //add items
    myCombo.addItem("middag");
    myCombo.addItem("avond");

   //This puts our combox in every cell of the first column
    TableColumn tableColumn = jTable1.getColumnModel().getColumn(1);


    //mouseclick listener
    jTable1.addMouseListener(new java.awt.event.MouseAdapter() {
        public void mouseClicked(java.awt.event.MouseEvent evt) {
            jTable1MouseClicked(evt);
        }
     });
    //actionlisteneren bij action performed
    myCombo.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            jComboBox1ActionPerformed(evt);
        }
    });


private void jTable1MouseClicked(java.awt.event.MouseEvent evt) {

            Point pnt = evt.getPoint();
            int row = jTable1.rowAtPoint(pnt);                  //This is the X 
            int col = jTable1.columnAtPoint(pnt);               //this is the Y -> Date
            String columnpje = ""+col;
            naambijcel = ""+jTable1.getValueAt(row,0);          //This variable will hold a name


            if (columnpje.equals("1")){
                datumbijcel = planningbeheermanager.getColumnArray().get(0); 
            }else if (columnpje.equals("2")){  
                datumbijcel = planningbeheermanager.getColumnArray().get(1);
            }else if (columnpje.equals("3")){       
                datumbijcel = planningbeheermanager.getColumnArray().get(2);    
            }else if (columnpje.equals("4")){
                datumbijcel = planningbeheermanager.getColumnArray().get(3);
            }else if (columnpje.equals("5")){
                datumbijcel = planningbeheermanager.getColumnArray().get(4);
            }else if (columnpje.equals("6")){
                datumbijcel = planningbeheermanager.getColumnArray().get(5);
            }else if (columnpje.equals("7")){
                datumbijcel = planningbeheermanager.getColumnArray().get(6);
            }

            //System.out.println(obj1);
            //System.out.println(row +" "+ col);
}

    private void jComboBox1ActionPerformed(java.awt.event.ActionEvent evt) {                                           
    // selectbox ding ("" zorgen ervoor dat het object in een string kan worden gezet.
    System.out.println("Dagdeel: "+myCombo.getSelectedItem());
    System.out.println("Naam: "+naambijcel);
    System.out.println("Datum: "+datumbijcel);
    }  

如果您想查看更多我们的代码或有任何其他问题,请随时提问!

4

1 回答 1

2

我不能完全确定,但对我来说,您似乎没有正确使用 TableModel。您在 jComboBox1ActionPerformed 中执行的操作实际上应该在setValueAt()中执行。

也许,扩展AbstractTableModel会比 DefaultTableModel 更合适,但同样,如果没有完整的代码,也无法确定。

于 2012-05-16T14:43:13.107 回答