0
我的任務是使用JOptionPane顯示一個對話框,該對話框顯示JTable上所選產品的信息。如何在JTable中使用監聽器?
我使用這個監聽器,但我不確定它是否正確使用?
table.getModel().addTableModelListener(new TableModelListener()
{
public void tableChanged(TableModelEvent e)
{
//code for JOptionPane?
}
});
我完成了除了顯示對話框部分之外的所有內容。這是我的代碼到目前爲止。我在正確的軌道上嗎?
這是我的代碼。
public class Table {
public static void main(String[] args)
{
Runnable r = new Runnable() {
public void run() {
new Table().createUI();
}
};
EventQueue.invokeLater(r);
}
private void createUI() {
try {
JFrame frame = new JFrame();
frame.setLayout(new BorderLayout());
JTable table = new JTable();
String readLine = null;
TableModel tableModel = new TableModel();
File file = new File("Products.csv");
FileReader reader = new FileReader(file);
BufferedReader bufReader = new BufferedReader(reader);
List<Products> studentList = new ArrayList<Products>();
while((readLine = bufReader.readLine()) != null) {
String[] splitData = readLine.split(",");
Products products = new Products();
products.setName(splitData[0]);
products.setNumber(splitData[1]);
products.setPrice(splitData[2]);
studentList.add(products);
}
tableModel.setList(studentList);
table.setModel(tableModel);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new JScrollPane(table));
frame.setTitle("Lab 5");
frame.pack();
frame.setVisible(true);
table.getModel().addTableModelListener(new TableModelListener()
{
public void tableChanged(TableModelEvent e)
{
//code for JOptionPane?
}
});
} catch(IOException ex) {}
}
class Products {
private String name;
private String number;
private String price;
public String getPrice() {
return price;
}
public void setPrice(String price) {
this.price = price;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
}
class TableModel extends AbstractTableModel
{
private List<Products> list = new ArrayList<Products>();
private String[] columnNames = {"Barcode", "Name","Price"};
public void setList(List<Products> list) {
this.list = list;
fireTableDataChanged();
}
@Override
public String getColumnName(int column) {
return columnNames[column];
}
public int getRowCount() {
return list.size();
}
public int getColumnCount() {
return columnNames.length;
}
public Object getValueAt(int rowIndex, int columnIndex) {
switch (columnIndex) {
case 0:
return list.get(rowIndex).getName();
case 1:
return list.get(rowIndex).getNumber();
case 2:
return list.get(rowIndex).getPrice();
default:
return null;
}
}
}
}
添加監聽器表中的[選擇模型(http://docs.oracle.com/javase/8/docs/api/使用javax /鞦韆/ JTable.html#getSelectionModel--)。有關詳細信息和工作代碼,請參見[如何使用表格:用戶選擇](http://docs.oracle.com/javase/tutorial/uiswing/components/table.html#selection)。 – 2014-11-02 10:05:40