2013-09-21 93 views
2

如何在JTable中顯示我的「Click」對象?從對象ArrayList創建JTable - Java

ArrayList<Click> myClicks = new ArrayList<Click>(); 

Click click = new Click(620, 1028); 
Click click2 = new Click(480, 230); 

myClicks.add(click); 
myClicks.add(click2); 

它應該是這個樣子:

|---Mouse X---|---Mouse Y---| 
|  620  |  1028 | 
|  480  |  230 | 

這實在是...

 |    | 
     v    v 
    click.getX() click.getY() 
    click2.getX() click2.getY() 

我不想使用2D對象[] [],因爲它將它們儘可能保持爲Click對象更有意義。

我知道我可能必須擴展TableModel接口,但我不知道如何。

我只想簡單快速地舉一個例子(java文檔有點混亂)。

+0

關於Java文檔的具體內容令人困惑?也許我們可以啓發你。 –

+0

@JoshM我已經花費了數小時的時間,文檔對於非常簡單的應用程序來說很不錯。它沒有解釋如何將錶鏈接到複雜對象的arrayList。我現在開悟了。 – Ant

回答

7

你可以使用DefaultTableModel,但在你的情況下,這將意味着您需要將您的數據轉換,以確認它的需求,更好地界定一個支持你的數據模型的模型...還有點兒點

以下示例使用AbstractTableModel,因爲它可讓您控制備份數據,但會負責管理大部分內務(註冊和觸發事件)。

該示例不可變。也就是說,您無法添加或刪除新點擊或更改現有點擊。這並不難做到,你應該通過How to use tables更多細節

enter image description here

import java.awt.EventQueue; 
import java.util.ArrayList; 
import java.util.List; 
import javax.swing.JFrame; 
import javax.swing.JScrollPane; 
import javax.swing.JTable; 
import javax.swing.UIManager; 
import javax.swing.UnsupportedLookAndFeelException; 
import javax.swing.table.AbstractTableModel; 

public class ClickTable { 

    public static void main(String[] args) { 
     new ClickTable(); 
    } 

    public ClickTable() { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
       } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { 
        ex.printStackTrace(); 
       } 

       List<Click> clicks = new ArrayList<>(25); 
       clicks.add(new Click(620, 1028)); 
       clicks.add(new Click(480, 230)); 
       ClickTableModel model = new ClickTableModel(clicks); 
       JTable table = new JTable(model); 

       JFrame frame = new JFrame("Testing"); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.add(new JScrollPane(table)); 
       frame.pack(); 
       frame.setLocationRelativeTo(null); 
       frame.setVisible(true); 
      } 
     }); 
    } 

    public class Click { 

     private int x; 
     private int y; 

     public Click(int x, int y) { 
      this.x = x; 
      this.y = y; 
     } 

     public int getX() { 
      return x; 
     } 

     public int getY() { 
      return y; 
     } 

    } 

    public class ClickTableModel extends AbstractTableModel { 

     private List<Click> clicks; 

     public ClickTableModel(List<Click> clicks) { 
      this.clicks = new ArrayList<>(clicks); 
     } 

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

     @Override 
     public int getColumnCount() { 
      return 2; 
     } 

     @Override 
     public String getColumnName(int column) { 
      String name = "??"; 
      switch (column) { 
       case 0: 
        name = "Mouse X"; 
        break; 
       case 1: 
        name = "Mouse Y"; 
        break; 
      } 
      return name; 
     } 

     @Override 
     public Class<?> getColumnClass(int columnIndex) { 
      Class type = String.class; 
      switch (columnIndex) { 
       case 0: 
       case 1: 
        type = Integer.class; 
        break; 
      } 
      return type; 
     } 

     @Override 
     public Object getValueAt(int rowIndex, int columnIndex) { 
      Click click = clicks.get(rowIndex); 
      Object value = null; 
      switch (columnIndex) { 
       case 0: 
        value = click.getX(); 
        break; 
       case 1: 
        value = click.getY(); 
        break; 
      } 
      return value; 
     }    
    }   
} 
1

更有意義,讓他們的點擊,只要對象儘可能地閱讀。

而且當你想在表格中顯示其他自定義對象時,可能還會出現其他情況。 Row Table Model爲對象的ArrayList提供了通用支持。它支持動態功能,如添加和刪除。

JButtonTableModel.java給出了實現對象的完整模型所需的代碼示例。