2017-01-12 11 views
-1

私は、Javaデータベースを使用しているJavaでプロジェクトを持っています。 私のデータベースには「回答」テーブルがあり、回答が良いか悪いかをユーザが投票できるようにする必要があります(+1または-1)。ユーザーは1つの回答に対して1回だけ投票することができます。JTableの矢印評価が

EDIT:ここ が選びだし質問の表示答えを私のコードです:ここでは

private void showAnswer(String chosenString) { 
     editAnswer = new JButton("Edit"); 
     deleteAnswer = new JButton("Delete"); 
     editAnswer.addActionListener(this); 
     deleteAnswer.addActionListener(this); 
     JPanel commentsPanel = new JPanel(); 
     answerFrame = new JFrame(); 
     answerFrame.setLayout(new BorderLayout()); 
     JLabel questionText = new JLabel(chosenString); 
     arrowNorth = new BasicArrowButton(BasicArrowButton.NORTH); 
     arrowSouth = new BasicArrowButton(BasicArrowButton.SOUTH); 
     arrowNorth.addActionListener(this); 
     arrowSouth.addActionListener(this); 
     answerFrame.add(questionText, BorderLayout.NORTH); 
     tableInsideModel = new ResultSetTableModel(null); 
     tableInside = new JTable(tableInsideModel); 
     JScrollPane tableScroll = new JScrollPane(tableInside); 
     answerFrame.add(tableScroll); 
     String query = "select a_id, answer, nickname, a.add_date from answers a inner join users on au_id=u_id where aq_id=" 
       + "(select q_id from questions where question='"+chosenString+"')"; 
     sendInsideQuery(query); 

     tableInside.addMouseListener(new MouseAdapter() { 
      public void mouseClicked(MouseEvent e){ 
       if(e.getClickCount()==2){ 
        JTable target = (JTable) e.getSource(); 
        int row = target.getSelectedRow(); 
        doubleClickValue = (int) tableInsideModel.getValueAt(row, 0); 
        String doubleClickText = (String) tableInsideModel.getValueAt(row, 1); 
        doubleClickWindow(doubleClickValue, doubleClickText); 
       } 
      } 
      public void mouseReleased(MouseEvent er){    
       int r = tableInside.rowAtPoint(er.getPoint()); 
       if(r>= 0 && r<tableInside.getRowCount()){ 
        tableInside.setRowSelectionInterval(r, r); 
       }else{ 
        tableInside.clearSelection(); 
       } 
       int rowindex = tableInside.getSelectedRow(); 
       if(rowindex<0) 
        return; 
       if(er.isPopupTrigger() && er.getComponent() instanceof JTable){ 
        popupInside = new JPopupMenu(); 

        popupInside.add(editAnswer); 
        popupInside.add(deleteAnswer); 
        popupInside.show(er.getComponent(), er.getX(), er.getY()); 
       } 
      } 
     }); 

     JButton buttonReturn = new JButton("Back"); 
     buttonReturn.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent arg0) { 
       answerFrame.setVisible(false); 
      } 
     }); 

     JButton buttonAddAnswer = new JButton("Add Answer"); 
     buttonAddAnswer.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent arg0) { 
       newAnswer(chosenString); 
      } 
     }); 


     commentsPanel.add(buttonAddAnswer,BorderLayout.CENTER); 
     commentsPanel.add(buttonReturn,BorderLayout.CENTER); 
     commentsPanel.add(arrowNorth, BorderLayout.WEST); 
     commentsPanel.add(arrowSouth, BorderLayout.WEST); 
     answerFrame.add(commentsPanel,BorderLayout.SOUTH); 

     answerFrame.setVisible(true); 
     answerFrame.setSize(1000, 500); 
     answerFrame.setLocationRelativeTo(null); 
    } 

は私の問題です: は、どのように私はその答えに投票したユーザー「記憶」してMySQLデータベースを強制することができますか? すべてのJTableの行に矢印(上下)を追加するオプションはありますか? または、GUIの下部に2つの矢印(上のように)を作ってTableModel.getValueAt();と答えてください。

+0

私はもっと慎重だったはずです。あなたが試したことの例を見せてください。 [mcve]はコード全体を単純に提供するよりも優れています。ここには多くのGUIがこの質問には役に立たない。 – AxelH

+0

私は何も試しませんでした。私はこの問題をどうやって解決できるのか分かりませんでした。 – najdzion15

+0

私はそれを行いました。私はそれを追加する方法を知っていますが、私は1人のユーザによる複数投票の1つの質問のためにこのプロジェクトを保護する方法を知らない。 – najdzion15

答えて

1

質問は私にとってはっきりしていないので、問題に焦点を当ててOPからのこのコメントを使用しました。

私はそれを得ましたが、ユーザーがまだ回答に投票していないかどうかを確認できますか?


あなたが質問に投票誰かを知りたい場合は、あなただけのテーブルでそれらの情報を保存する必要があります。

この表は、質問の参照とユーザーの投票に参加します。

私はあなたのテーブルについて十分に知りませんので、いくつかの擬似コード。

CREATE TABLE vote (
    id_question numeric, 
    id_user  numeric, 
    vote  bit, -- 0 : -1 and 1 : +1 
) 

次に、あなただけの価値があるかどう確認するには、このテーブルの上に左結合を使用する必要があります。

SELECT id_question, id_user, question_value, vote 
    FROM question q 
    LEFT JOIN vote v ON q.id  = v.id_question 
        AND v.id_user = ? 

左を使用して何がある場合はnullにvoteを与えないだろう参加まだ投票。

vote(id_question, id_user)にユニーク制約を追加するだけで、データベース内の投票の重複やDAOの同じ制御が行われないようにする必要があります。