[英]How to add listener to table?
我正在嘗試向JTable添加一個刪除所選行的偵聽器。
我有一個類ToolBar,其中包含所有按鈕,但我的所有JTable設置都在另一個類:TablePanel。
我希望能夠在用戶單擊ToolBar類中的按鈕時刪除行。
ToolBar.java
public class ToolBar extends JPanel
{
TablePanel tablePane;
JButton openButton, saveButton, addButton, delButton;
ImageIcon openIcon, saveIcon, addIcon, delIcon;
Image openImage, saveImage, addImage, delImage;
Image openImage2, saveImage2, addImage2, delImage2;
ButtonListener listener;
public ToolBar(TablePanel tablePane)
{
this.tablePane = tablePane;
//Bunch of codes here to initialize all the buttons and icons
}
//Button Listener
private class ButtonListener implements ActionListener
{
public void actionPerformed(ActionEvent event)
{
if (event.getSource() == openButton)
JOptionPane.showMessageDialog(null, "hello");
if (event.getSource() == saveButton)
tablePane.saveData();
if (event.getSource() == addButton)
tablePane.addRow();
if (event.getSource() == delButton)
tablePane.delRow();
}
}
}
TablePanel
public class TablePanel extends JPanel
{
//Table's column name
private ArrayList<String> columnNames = new ArrayList<String>();
//List of data, later needs to be change
//so that it will be editable on the go
//It starts with 5 columns
//User can add more columns
private ArrayList<Object[]> data = new ArrayList<Object[]>();
//DefaultTableModel is needed for adding new rows
private JTable table;
private TModel tModel;
private JScrollPane scrollPane;
//For importing & exporting data
JFileChooser fileChooser;
public TablePanel()
{
//Column Names:
columnNames.add("Date");
columnNames.add("Category");
columnNames.add("Details");
columnNames.add("Add/Subtract");
columnNames.add("Total");
//Example data:
data.add(new Object[]{20140925, "Grocery", "Supermarket", -5.23,600.00});
data.add(new Object[]{20141013,"Car Maintenance", "Changing Tires", -200.00, 400.00});
//Some codes here
}
private class TModel extends AbstractTableModel implements TableModelListener
{
//Bunch of codes(methods) in here such as:
//public voide setValueAt, public Boolean isCellEditable, getColumnCount etc.
//Method for deleting row
public void delRow()
{
public void tableChanged(TableModelEvent event)
{
int row = event.getFirstRow();
fireTableRowsDeleted(row, row);
}
}
} //End of TModel class
} //End of TablePanel Class
我應該如何實現listener和fireTableDeleted(int row)? 我應該在public void delRow()中添加什么?
有人需要引用其他人,但您也希望保持一定程度的分離,這樣您就不會將組件緊密耦合在一起
您可以使用某種類型的控制器,該控制器具有對表的引用,並且可以直接監聽工具欄上的按鈕,也可以調用工具欄可以調用它並指示它想要執行的操作。
例如,單擊時,刪除按鈕將簡單地指示控制器“刪除所選行”。 控制器會要求TablePane
“刪除所選行”, TablePane
將遵守。
這可以通過Actions API實現,其中Action
將充當控制器。
基本上你會創建一個新的DeleteRowAction
(這是你必須創建的類),它有一個對TablePane
的引用,你將傳遞給ToolBar
窗格。 然后,您可以將Action
應用於刪除按鈕( JButton#setAction
),並讓它為您處理其他所有事情
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.