我对在为学校编程时出现的问题提出了一个问题。
我们想在周一到周日做一个总结,小公司的老板可以看到他的员工,以及他可以在哪里为那些人分配时段。我们为此使用了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);
}
如果您想查看更多我们的代码或者您有任何其他问题,请随时询问!
答案 0 :(得分:2)
我不能完全确定,但对我来说,看起来你没有正确使用TableModel。您在jComboBox1ActionPerformed中执行的操作实际上应该在setValueAt()中执行。
也许,扩展AbstractTableModel比DefaultTableModel更合适,但是如果没有完整的代码,也无法确定。