簡體   English   中英

如何向表添加監聽器?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM