簡體   English   中英

每次用戶在Java中輸入值時,如何創建更新ArrayList的表?

[英]How can I create a table that updates an ArrayList every time a user enters a value in Java?

我有2列,x和y。 每次用戶編輯列時,我希望將該數據附加到相應的ArrayList列(對於x,xValues,對於y,yValues)。 通過閱讀關於Tables和TabelModels的Oracle教程,我假設我需要在表中添加某種監聽器。 我該怎么辦? 到目前為止,這是我的代碼:

public class MainTable extends JPanel {
private static final long serialVersionUID = -5093783987473381647L;
private ArrayList<Integer> xValues = new ArrayList<Integer>();
private ArrayList<Integer> yValues = new ArrayList<Integer>();

public MainTable() {
    super(new GridLayout(1,0));
    createFrame();

    JTable table = new JTable(new TheTabelModel());

    JScrollPane scrollPane = new JScrollPane(table);

    add(scrollPane);
}

class TheTabelModel extends AbstractTableModel {
    private static final long serialVersionUID = -1698344960140377275L;
    private String[] columnNames = {"x", "y"};
    private Object[][] data = {
            {0, 0},
            {0, 0},
            {0, 0},
            {0, 0},
            {0, 0},
            {0, 0},
            {0, 0},
            {0, 0},
    };

    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 Class<?> getColumnClass(int c) {
        return getValueAt(0, c).getClass();
    }

    public boolean isCellEditable(int row, int col) {
        if (col < 2) {
            return false;
        } else {
            return true;
        }
    }
}

private void createFrame() {
    JFrame frame = new JFrame("SimpleTableDemo");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.pack();
    frame.setVisible(true);
    frame.setSize(new Dimension(510, 200));
    frame.setLocationRelativeTo(null);
    frame.add(this);
}

您是否可以實現一個觸發器來調用Java函數,而Java函數又會在Java代碼中更新您的ArrayList?

請檢查以下內容: https//docs.oracle.com/cd/F49540_01/DOC/java.815/a64686/04_call2.htm

步驟:

CREATE OR REPLACE PROCEDURE log_sal (
  emp_id NUMBER, old_sal NUMBER, new_sal NUMBER)
AS LANGUAGE JAVA
NAME 'DBTrigger.logSal(int, float, float)';

觸發器,調用該過程:

CREATE OR REPLACE TRIGGER sal_trig
AFTER UPDATE OF sal ON emp
FOR EACH ROW
WHEN (new.sal > 1.2 * old.sal)
CALL log_sal(:new.empno, :old.sal, :new.sal);

您可以將觸發器設置為在更新時運行,這樣每次用戶進行更新時,它都會調用該函數,該函數會更新ArrayList。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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