2016-08-26 6 views
0

次のメソッドがあります。このメソッドは、編集可能なセルのデータベース管理テーブルのレコードをJTableにロードしています。編集したJTableセルのレコードをデータベースに更新する方法

private void renderAdminInfoTable() { 
     adminInfoTable = new JTable(); 
     adminInfoTable.setPreferredScrollableViewportSize(new Dimension(400, 181)); 
     adminInfoTable.setFillsViewportHeight(true); 
     adminInfoTable.setBackground(ARSColour.TRANSPARENTBLUE); 
     adminInfoTable.setGridColor(new Color(128, 128, 128, 50)); 
     adminInfoTable.setRowHeight(32); 
     adminInfoTable.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0)); 
     adminInfoTable.setShowVerticalLines(false); 

     DefaultTableModel model = new DefaultTableModel() { 
      @Override 
      public boolean isCellEditable(int row, int column) { 
       switch (row){ 
        case 0://Name 
         return false; 
        case 1: //Email 
         if(column == 1) 
          return true; 
         else 
          return false; 
        case 2: //Phone 
         if(column == 1) 
          return true; 
         else 
          return false; 
        default: 
         return false; 
       } 
      } 
     }; 
     adminInfoTable.setModel(model); 

     //Create the scroll pane and add the table to it. 
     scrollPaneInfo = new JScrollPane(adminInfoTable); 
     this.add(scrollPaneInfo); 
     scrollPaneInfo.setBounds(36+20, 768 - 628+10, 400-20*2, 181-10); 
     scrollPaneInfo.setBorder(BorderFactory.createEmptyBorder(0,0,0,0)); 
     scrollPaneInfo.setBackground(ARSColour.TRANSPARENTBLUE); 

     JScrollBar sb = scrollPaneInfo.getVerticalScrollBar(); 
     sb.setUI(new MyScrollbarUI()); 
     // sets width of scrollbar 
     Dimension scrollBarDim = new Dimension(10, sb 
       .getPreferredSize().height); 
     sb.setPreferredSize(scrollBarDim); 

    } 

別の方法では、addActionListenerを使用して[保存]ボタンを使用してdbQueries.updateAdmin()メソッドを呼び出します。

public void renderAdminInformationPanel() { 
     AdminInfoLabel = new JLabel("Edit Admin Information"); 
     AdminInfoLabel.setFont(new Font("Open Sans", Font.PLAIN, 22)); 
     AdminInfoLabel.setBounds(36, 768 - 662 - 6, AdminInfoLabel.getPreferredSize().width, AdminInfoLabel.getPreferredSize().height); 
     AdminInfoLabel.setForeground(ARSColour.BRIGHTBLUE); 
     AdminInfoLabel.setBackground(ARSColour.WHITE); 
     AdminInfoLabel.setOpaque(true); 
     this.add(AdminInfoLabel); 

     btnSave = new JButton("Save"); 
     btnSave.setBounds(196, 998 - 662 - 6, btnSave.getPreferredSize().width, btnSave.getPreferredSize().height); 
     btnSave.setOpaque(true); 
     this.add(btnSave); 
     btnSave.addActionListener(new AbstractAction() { 
      @Override 
      public void actionPerformed(ActionEvent e) { 
       dbQueries.updateAdmin(); //HERE IS THE METHOD CALL WHERE I NEEDED TO PASS ALL EDITED COLUMNS IN ORDER TO SAVE INTO DATABASE. 
      } 
     }); 

     renderAdminInfoTable(); 

     tableBackground = new JPanel(); 
     this.add(tableBackground); 
     tableBackground.setBounds(36, 768 - 628, 400, 181); 
     tableBackground.setBorder(BorderFactory.createEmptyBorder(0,0,0,0)); 
     tableBackground.setBackground(ARSColour.TRANSPARENTBLUE); 

     adminInfoPanel = backgroundJPanel(24, 768-675, 424, 340); 
    } 

私の質問は:どのように私は、データベースを更新するためにUPDATEADMIN()メソッドの中で編集したすべてのセルの値を渡すのでしょうか? - ありがとう

+1

'scrollPaneInfo.setBounds(36 + 20,768 - 628 + 10,400-20 * 2,181-10);'うわー! 「魔法の数」について話す。それらはブードゥーです! Java GUIは、異なるロケールの異なるPLAFを使用して、異なるOS、画面サイズ、画面解像度などで動作する必要があります。したがって、ピクセルの完全なレイアウトには役立ちません。代わりに、レイアウトマネージャや[それらの組み合わせ](http://stackoverflow.com/a/5630271/418556)と[空白](http://stackoverflow.com/a/17874718/)のレイアウトパディングとボーダーを使用してください。 418556)。より一般的には:.. –

+1

..もっと早く助けを求めるには、[MCVE]または[短く、自己完結型の正しい例](http://www.sscce.org/)を投稿してください。 –

+0

'dbQueries.updateAdmin()'メソッドは何をしていますか?基本的には、パラメータを渡すことができる新しいメソッドを記述するだけです。パラメータはJTableセルから取得され、データベースに挿入されます。コードは使用しているデータベースによって異なります。 – Payam

答えて

0

ありがとうございました。私は私の答えを見つけた。 私はUPDATEADMIN()に渡す前に、私はstopCellEditing()しなければなりませんでした。コードは次のとおりです。

 if(adminInfoTable.isEditing()){ 
         adminInfoTable.getCellEditor().stopCellEditing(); 
        } 
adminInfoTable.getValueAt(

          adminInfoTable.getSelectedRow(), 
          adminInfoTable.getSelectedColumn() 
        ) 

それでした。それで私はセル編集値を渡すことができました。

0

私はデータベースからロードするときにモデルオブジェクトを構築し、モデル内の変更を追跡するメソッドを実行する必要があると思います。 isUpdatedという名前のプロパティのようなもの。

これで、isUpdatedがtrueのモデルを保存するためのボタンに対する外部アクションを実行できます。その後、isUpdated値をリロードまたはリセットします。

関連する問題