我有一個工作程序,使用由Item
列表組成的Model
。創建不同的JTable,同時保留泛型
public class Model {
private List<Item>;}
public abstract class Item{}
public class A extends Item{}
public class B extends Item{}
public class C extends Item{}
但現在我需要在表示特定的項目(A,B,C)的中心創建具有一些動作按鈕(添加,刪除,編輯)配有一個JTable的圖。 這是我的第一個問題,因爲每個特定的項目將有一個字段的列,所以我需要爲每個項目不同的表。
一個解決方案可能是爲每種類型的物品配一張表格,但是會出現一個新問題,我的視圖如何確定模型中存在多少類型的物品而不使用instanceof()
?
此外,我會在這之後有其他問題,如果我在我的視圖中有x jtable我的視圖將如何獲得此表的模型?我可以實現對每一個項目這樣的接口:
public interface MyModel{
AbstractTableModel getModel();
}
,但我只能給這個函數的清單,讓每個項目將如何填充數據陣列,只有其項目類型?
PS:如果我進一步在我的反思我有一個獎金問題,我想知道如何我的動作按鈕的偵聽器可以簡單地知道哪些JTable當前正在修改,我應該把聽衆放在視圖中爲了簡單訪問cardlayout?
如果有什麼需要改善我的問題,要求它!不確定這個問題目前是否清楚。
編輯:添加SSCCE,這是我瞄準但它目前不使用我的程序的項目,並沒有實現TableModel/TableModelListener。
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.JTable;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;
public class View extends JPanel implements TableModelListener{
private static final long serialVersionUID = 1L;
private JTabbedPane card;
public View() {
Object rowData[][] = { { "1", "one", "I" }, { "2", "two", "II" }, { "3", "three", "III" } };
String columnNames[] = { "#", "English", "Roman" };
Object rowData2[][] = { { "1", "B" } };
String columnNames2[] = { "#", "type" };
setLayout(new BorderLayout());
JPanel actionbutton = new JPanel();
JButton but = new JButton("fire");
but.addActionListener(new ButtonListener());
actionbutton.add(but);
add(actionbutton,BorderLayout.SOUTH);
card = new JTabbedPane();
//something should determine how many type of object in a List<Item> w/o using instanceof
//should fill jtable with a specific TableModel for each item type
JTable card1 = new JTable(rowData,columnNames);
JTable card2 = new JTable(rowData2,columnNames2);
card.addTab("Item A",new JScrollPane(card1));
card.addTab("Item B",new JScrollPane(card2));
add(card,BorderLayout.CENTER);
}
private class ButtonListener implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
String cmd = e.getActionCommand();
if ("fire".equals(cmd)) {
//do something on the model
}
}
}
public static void main(String[] args) {
JFrame f = new JFrame();
f.setSize(800, 600);
f.add(new View());
f.setVisible(true);
}
@Override
public void tableChanged(TableModelEvent e) {
//update jtable with the model's modification
}
}
你的意思是,每個項目類將有不同數量的,你想JTable中列顯示的屬性? – Randy
有一堆關於基於'util.List'的'AbstractTableModel'的線程,參見相關(左下),剩餘的問題可能是un_rellated,沒有發佈[SSCCE](http://sscce.org/),short ,可運行,可編譯, – mKorbel
是的,每個項目都有不同數量的屬性,所以我需要爲它們中的每一個製作不同的JTable,製作不同的模型 –