2016-07-28 77 views
2

我創建了一個JFrame,我想創建一個AbstractTableModel以在灰色框中使用dbquery顯示數據庫中的數據。如何使用java在AbstractTableModel中顯示數據?

這是我第一次這樣做,我一直在掙扎很久,真希望能得到一些幫助!謝謝。

JButton btnSubmit = new JButton("Submit"); 
    btnSubmit.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent e) { 
      boolean conditionOK = false; 

      if(chckbxr.isSelected()==false && chckbxr_1.isSelected()==false && chckbxr_2.isSelected()==false && chckbxr_3.isSelected()==false){ 
       JOptionPane.showMessageDialog(frame,"Please select client account"); 
      } 
      else if(fromDate.getText().equals("")){ 
       JOptionPane.showMessageDialog(frame, "Please enter starting date"); 
      } 
      else if(toDate.getText().equals("")){ 
       JOptionPane.showMessageDialog(frame, "Please enter end date"); 
      } 
      else if(Integer.parseInt(fromDate.getText()) > Integer.parseInt(toDate.getText())){ 
       JOptionPane.showMessageDialog(frame, "End date is earlier than starting date"); 
      } 
      else 
      conditionOK = true; 

      if(conditionOK==true){ 

       int fromYear = Integer.parseInt(fromDate.getText().substring(0, 4)); 
       int fromMonth = Integer.parseInt(fromDate.getText().substring(4,6))-1; 
       int fromDay = Integer.parseInt(fromDate.getText().substring(6,8)); 
       int toYear = Integer.parseInt(toDate.getText().substring(0, 4)); 
       int toMonth = Integer.parseInt(toDate.getText().substring(4,6))-1; 
       int toDay = Integer.parseInt(toDate.getText().substring(6,8)); 

       SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); 
       SimpleDateFormat sdf1 = new SimpleDateFormat("yyyyMMdd"); 
       SimpleDateFormat sdf2 = new SimpleDateFormat("dd MMM yyyy"); 
       DateFormat formatter; 
       formatter = new SimpleDateFormat("yyyy-MM-dd"); 

       Calendar convertedToDate = Calendar.getInstance(); 
       convertedToDate.set(toYear,toMonth,toDay); 
       Calendar convertedFromDate =Calendar.getInstance(); 
       convertedFromDate.set(fromYear,fromMonth,fromDay); 

       int MonthDifferenceCount = 1; 
       //calculate months difference 
       for (MonthDifferenceCount=1; convertedFromDate.compareTo(convertedToDate) <0; MonthDifferenceCount++) 
       { 
        convertedFromDate.add(Calendar.MONTH, 1); 
        convertedFromDate.set(convertedFromDate.DAY_OF_MONTH,convertedFromDate.getActualMaximum(Calendar.DAY_OF_MONTH)); 
       } 

       convertedToDate.set(toYear,toMonth,toDay); 
       convertedFromDate.set(fromYear,fromMonth,fromDay); 


       //DateArray and PreDate Array are used to store date as date format. Shall be use for tradeDate and SetlDate 
       Date preDateArray[] = new Date[MonthDifferenceCount]; 
       Date DateArray [] = new Date[MonthDifferenceCount]; 
       for (int i=0; i <MonthDifferenceCount; i++) 
       { 
        convertedFromDate.add(Calendar.MONTH,-1); 
        convertedFromDate.set(convertedFromDate.DAY_OF_MONTH,convertedFromDate.getActualMaximum(Calendar.DAY_OF_MONTH)); 
        preDateArray[i] = convertedFromDate.getTime(); 
        try { 
         preDateArray[i] = (Date)formatter.parse(sdf.format(preDateArray[i])); 
        } catch (ParseException e1) { 
         e1.printStackTrace(); 
        } 

        convertedFromDate.add(Calendar.MONTH, 1); 
        convertedFromDate.set(convertedFromDate.DAY_OF_MONTH,convertedFromDate.getActualMaximum(Calendar.DAY_OF_MONTH)); 
        DateArray[i] = convertedFromDate.getTime(); 
        try { 
         DateArray[i] = (Date)formatter.parse(sdf.format(DateArray[i])); 
        } catch (ParseException e1) { 
         e1.printStackTrace(); 
        } 
        convertedFromDate.add(Calendar.MONTH, 1); 
       } 

       summaryFromDate = sdf2.format(DateArray[0]); 
       summaryToDate = sdf2.format(DateArray[DateArray.length-1]); 

       String DateList[] = new String[MonthDifferenceCount]; 
       String PreDateList[] = new String[MonthDifferenceCount]; 
       for (int i=0; i<DateArray.length; i++) 
       { 
        DateList[i] = sdf1.format(DateArray[i]); 
        PreDateList[i] = sdf1.format(preDateArray[i]); 
       } 


       ArrayList<String> cltAccList = new ArrayList<String>(); 

       if(chckbxr.isSelected()==true){ 
        cltAccList.add("10190R"); 
       } 
       if(chckbxr_1.isSelected()==true){ 
        cltAccList.add("10230R"); 
       } 
       if(chckbxr_2.isSelected()==true){ 
        cltAccList.add("10280R"); 
       } 
       if(chckbxr_3.isSelected()==true){ 
        cltAccList.add("10290R"); 
       } 
      } 
     } 
    }); 
    btnSubmit.setBounds(37, 643, 89, 23); 
    add(btnSubmit); 

提交日期後,AbstractTableModel實際上應顯示數據庫中的數據。

表型號:

public class MTableModel { 

public static class MyModel extends AbstractTableModel { 

     private List<Object[]> data; 
     private List<String> columnNames; 

     public MyModel(List<String> columnNames, List<Object[]> data) { 
      super(); 
      this.columnNames = columnNames; 
      this.data = data; 
     } 

     @Override 
     public int getRowCount() { 
      return data.size(); 
     } 

     @Override 
     public int getColumnCount() { 
      return columnNames.size(); 
     } 

     @Override 
     public String getColumnName(int column) { 
      return columnNames.get(column); 
     } 

     @Override 
     public Object getValueAt(int rowIndex, int columnIndex) { 
      return data.get(rowIndex)[columnIndex]; 
     } 
    } 



    protected void initUI() { 
     JFrame frame = new JFrame(MTableModel.class.getSimpleName()); 
     List<String> columns = Arrays.asList("Name", "Gender"); 
     List<Object[]> data = new ArrayList<Object[]>(); 
     for (int i = 0; i < 50; i++) { 
      Object[] value = new Object[2]; 
      data.add(value); 
     } 
     JTable table = new JTable(new MyModel(columns, data)); 
     frame.add(new JScrollPane(table)); 
     frame.pack(); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       new MTableModel().initUI(); 
      } 
     }); 
    } 

}

+0

工作合作來自Oracle教程的示例 - 如何使用Tables或ResultSetTableModel或TableFromDatabase,投票也要關閉 – mKorbel

+0

爲什麼不發佈目前爲止已編碼的內容,有些代碼將不勝感激以獲得一些支持 – kaya

+0

@kaya我編輯了我的帖子。基本上我想要做的是顯示在這段時間內發生的數據。我已經有了sql查詢來生成數據。我現在面臨的問題是創建一個表格並將其顯示在JFrame中。感謝您的回覆:) –

回答

2

value陣列得到初始化爲默認的一對null條目。

Object[] value = new Object[2]; 

試試這個:

for (int i = 0; i < 50; i++) { 
    Object[] value = new Object[]{"Name" + i, Math.random() < .5 ? "M" : "F"}; 
    data.add(value); 
} 

image

0

附上您這種情況,一個完整的例子:

import java.awt.BorderLayout; 
import java.awt.Dimension; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JScrollPane; 
import javax.swing.JTable; 
import javax.swing.table.AbstractTableModel; 

/** 
* Example class to learn how to use AbstractTableModel 
* 
* @author Moreno 
* 
*/ 
public class Example extends JFrame { 

    private static final long serialVersionUID = 1L; // default serialVersionUID 

    /** 
    * Example class, is a JFrame 
    * 
    */ 
    public Example() { 
     super("Example"); 

     TableModelCustom myModel = new TableModelCustom(); //Create my table model 
     JTable table = new JTable(myModel);     //Create JTable 
     table.setPreferredScrollableViewportSize(new Dimension(480, 70)); //Prefered size scroll 

     JScrollPane scrollPane = new JScrollPane(table); //Create scroll with table 

     JButton button = new JButton("Click me");   //Create JButton 
     JButton button2 = new JButton("Click me2");   //Create JButton2 
     button.addActionListener(new ActionListener() {  //Listener onClick... 

      @Override 
      public void actionPerformed(ActionEvent e) { 
       //Change data 
       Object[][] data = { { "Rick", "Mourt", "Main Street", 55, true} }; 

       //Send data to the model 
       myModel.setData(data); 
      } 
     }); 

     button2.addActionListener(new ActionListener() {  //Listener onClick... 

      @Override 
      public void actionPerformed(ActionEvent e) { 
       //Change data 
       Object[][] data = { { "Thomas", "Mourt", "Main Street 50", 55, true }, 
         { "Rich", "Fua", "Main Street 2", 25, false }, 
         { "Alan", "Poe", "Main Street 3", 12, true } }; 

       //Send data to the model 
       myModel.setData(data); 
      } 
     }); 

     //Add components to the window 
     add(button, BorderLayout.NORTH);  //Add first button 
     add(scrollPane, BorderLayout.CENTER); //Add scroll pane 
     add(button2, BorderLayout.SOUTH);  //Add first button 


     pack(); 
     setVisible(true); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    } 

    /** 
    * Model 
    * 
    * @author Moreno 
    * 
    * @see AbstractTableModel 
    */ 
    class TableModelCustom extends AbstractTableModel { 
     private static final long serialVersionUID = 1L; 

     // Columns 
     private String[] columnNames = { "Name", "Surname", "Direction", "Age", "Sport" }; 
     // Data 
     private Object[][] data = { { "Peter", "Serry", "Rue....", 5, false }, 
       { "Paul", "Hey", "XXX", 13, true }, 
       { "Patriks", "--", "XXX", 26, false }, 
       { "Alice", "Hall", "XXX", 24, true }, 
       { "Mary", "Houstong", "XXX", 12, false } }; 

     /** 
     * This method receives the new data vector, and update the table 
     * 
     * @param data 
     *   with new values 
     */ 
     public void setData(Object[][] data) { 
      this.data = data;  //Save data.. 
      fireTableDataChanged(); //Update table 
     } 

     public int getColumnCount() { 
      return columnNames.length; 
     } 

     public int getRowCount() { 
      return data.length; 
     } 

     public String getColumnName(int col) { 
      return columnNames[col]; 
     } 

     public Object getValueAt(int row, int col) { 
      return data[row][col]; 
     } 

     public void setValueAt(Object value, int row, int col) { 
      data[row][col] = value; 
      fireTableCellUpdated(row, col); 

     } 


    } 

    public static void main(String[] args) { 
     new Example(); //Create the window 
    } 
} 

請使其適應您的需求

相關問題