0

学校向けのプログラミング中に発生した問題について質問があります。

月曜日から日曜日までの要約を作成します。ここでは、小さな会社の上司が従業員を見ることができ、それらの人々に時間帯を割り当てることができます。これにはJTableを使用しました。すべてのセルに、時間帯(朝、午後、夕方)を含むコンボボックスを実装したいと思います。

したがって、セルをクリックするときに、表示されるコンボボックスをクリックして、時間帯を選択できるようにします。次に、名前、割り当てられた日、および昼間をデータベースに入力できるようにします。 。(今のところ、それらを変数などに入れても問題ありません。データベースに入れます。)

これは、これまでのGUIのスクリーンショットです。GUI へのリンク

ここまでは順調ですね。GUIの見た目にはあまり力を入れていませんので、機能に焦点を当てる間はご容赦ください=)。私たちの唯一の問題は、名前、日付、新しい時間帯をデータベースに入れることができるように、変更されるセルにリンクされている日付と人を知るプログラムが必要なことです。

私たちはこれを試しました:あなたがリストのセルをクリックしたとき、私たちはclicklisterenを使用しました。そのメソッドにいくつかのコードを入れて、座標を見ることができたので、名前と日付を取得しました。それはうまくいった。次に、コンボボックスの実装を試みました。そこでも成功しました。ただし、セルがコンボボックスになると、クリック方式は使用されなくなります。

だからここに私たちの質問があります:これは私たちが望むものを手に入れるための適切な方法ですか?もしそうなら、コンボボックスを変更するときに名前と日付が何であるかを知ることができるようにリストを修正して、これをデータベースに入れるにはどうすればよいですか?そうでない場合は、何を変更する必要がありますか?目標を達成するために、代わりにどのような種類の他のリスナーまたは他のコードを使用する必要がありますか?

これが私たちのコードの一部です:

    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 に答える