/ Forside / Teknologi / Udvikling / Java / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java
#NavnPoint
molokyle 3688
Klaudi 855
strarup 740
Forvirret 660
gøgeungen 500
Teil 373
Stouenberg 360
vnc 360
pmbruun 341
10  mccracken 320
Jtable og events
Fra : Søren Møller Mogense~


Dato : 28-07-02 08:53

Hej,

Jeg vil gerne lytte på hvornår indholdet af en JTable bliver ændret.
Det kunne f. eks. være når man redigerer indholdet af en celle, eller når
man "flytter sig væk" fra en celle.

Hvilke events skal jeg lytte på, og skal det være på selve tabellen eller
skal det være på modellen???

Mvh.
Søren



 
 
Daniel Jacobsen (29-07-2002)
Kommentar
Fra : Daniel Jacobsen


Dato : 29-07-02 00:42

Tabeller (JTable) er lette at lave og have med at gøre, hvis bare lige man
forstår pringcippet bag. De kan laves på mange måder. Den jeg her vil vise
er den pæneste og i længden nemmeste at arbejde med:

Du har din JDialog eller JFrame med tabellen, hvor du initerer din JTable på
følgende måde:

MinTableModel tableModel;
tableModel= new MinTableModel(table, scroll, this);
table.updateUI();
scroll.getViewport().add(table, null);


Ved siden af laves så en klasse (styrer al adfærd vedrørende tabellen), som
arver AbstractTableModel (MinTableModel)

import javax.swing.*;
import javax.swing.event.ListSelectionListener;
import javax.swing.event.ListSelectionEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.KeyListener;
import java.awt.event.KeyEvent;
import javax.swing.table.*;

class MinTableModel extends AbstractTableModel {
private String[] columnNames = {"Navn", "Efternavn", "Alder",
"Gennemsnit"};
private Object[][] data;
private ListSelectionModel rowSM;
private JTable table;
private JScrollPane scroll;

public MinTableModel(JTable table, JScrollPane scroll) {
this.table = table;
this.scroll = scroll;
setData(new Object[0][columnNames.length]);
table.setModel(this);
initTable();
}

private void initTable() {
table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
// Den ønskede bredde sættes for alle kolonner
table.getColumnModel().getColumn(0).setPreferredWidth(200);
table.getColumnModel().getColumn(1).setPreferredWidth(75);
table.getColumnModel().getColumn(2).setPreferredWidth(75);
table.getColumnModel().getColumn(3).setPreferredWidth(50);
table.setShowHorizontalLines(false);
addMouseListenerRightClick();
setSelectionModel();
}

private void setData(Object[][] data) {
this.data = data;
}

// Mouse Listener til højre-klik
private void addMouseListenerRightClick() {
table.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) { maybeShowPopup(e); }
public void mouseReleased(MouseEvent e) { maybeShowPopup(e); }
private void maybeShowPopup(MouseEvent e) {
if (e.isPopupTrigger()) {
// Dette sker ved højre-klik på musen
}
}
});
}

// Selection Listener
private void setSelectionModel() {
rowSM = table.getSelectionModel();
rowSM.addListSelectionListener(new ListSelectionListener() {
public void valueChanged(ListSelectionEvent e) {
if (e.getValueIsAdjusting()) return;
ListSelectionModel lsm = (ListSelectionModel)e.getSource();
if (lsm.isSelectionEmpty()) {
// Dette udføres når intet i tabellen er valgt
}
else {
// Udføres når et linie i tabellen vælges
}
}
});
}

public void update(Object[][] data) {
setData(data);
table.updateUI();
scroll.getViewport().updateUI();
}

public void updateUI() {
table.updateUI();
scroll.getViewport().updateUI();
}

// ---------------------------------------------------------
// | Trivieller metoder |
// ---------------------------------------------------------
public Object getValueAt(int row, int col) { return data[row][col]; }
public boolean isCellEditable(int row, int col) { return false; }
public int getRowCount() { return data.length; }
public int getColumnCount() { return columnNames.length; }
public String getColumnName(int col) { return columnNames[col]; }
public Class getColumnClass(int col) { return getValueAt(0,
col).getClass(); }
// Denne metode udføres, når der indtastes noget i en af cellerne i
tabellen
public void setValueAt(Object value, int row, int col) {
data[row][col] = value;
fireTableCellUpdated(row, col);
}
}

Det smarte er, at model-klassen selv styrer al udfærd, også omkring
opdatering af GUI-elementerne (JTable og JScrollPane)

Mvh. Daniel J.



Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408925
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste