JTable中的问题Combobox

时间:2012-05-16 14:20:23

标签: java swing jtable jcombobox

我对在为学校编程时出现的问题提出了一个问题。

我们想在周一到周日做一个总结,小公司的老板可以看到他的员工,以及他可以在哪里为那些人分配时段。我们为此使用了JTable。在每个单元格中,我们都希望与时段(早晨,下午,晚上)一起实施Combobox。

因此,当点击一个单元格时,我们希望能够点击显示的组合框,选择一个时段,然后我们希望能够输入名称,它们是星期日和白天,在数据库中。 (现在,将它们放入变量或任何东西都没关系,我们自己将它放在数据库中。)

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

到目前为止,这么好。我们没有在GUI的外观上付出任何努力,所以请关注我,同时我们专注于功能=)。我们唯一的问题是我们需要程序知道什么日期以及与被更改的cel链接的人,以便我们可以将名称,日期和新的时段放在数据库中。

我们尝试了这个:当你点击列表中的cel时,我们使用了clicklisteren。我们在该方法中放入了一些代码,它能够看到坐标,因此得到名称和日期。那很有效。然后我们尝试实现组合框。我们也在那里取得了成功。但是,当cel成为组合框时,点击方法将不再使用。

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

以下是我们的一些代码:

    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);
    }  

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

1 个答案:

答案 0 :(得分:2)

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

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