29. november 2002 - 18:28Der er
6 kommentarer og 1 løsning
JTabel Listener
Hej Jeg har en tabel som indeholder 25 rækker og 13 kolonner. Jeg vil så gerne at hvis nu fx brugeren begynder at skrive i en tom række, så skal en række funktioner udføres. Fx så skal der skrives et id nummer i kolonne1. Jeg tror det er noget med "getRow" og "Listener" men jeg er for det første ikke sikker og ved ikke hvodan jeg skal bruge det. Jeg har kigget lidt i de andre spg, men kan ikke lige finde noget.
Så spørgsmålet er hvordan udfører man en eller flere funktioner når brugeren klikker og begynder at skrive i en række?
Jeg vil gerne sende Tabellen hvis det skulle være nødvendigt.
// Dette er det essentielle: ListSelectionModel selectionModel = table.getSelectionModel(); selectionModel.addListSelectionListener( new ListSelectionListener() { /* Metoden definerer hvad vi gør når tabellen vælges * du skal definere denne metode, da du implementerer ListSelectionListener */ public void valueChanged( ListSelectionEvent event ) {
Det ser godt det vil jeg arbejde lidt med i eftermiddag, Hvis jeg i fx ændre dine startværdier til: -------------- String dataValues[][] = { { "", "", "" }, { "", "", "" }, { "", "", "" }, { "", "", "" } };
--------------- så kan jeg vel godt udfører en metode i denne del af koden ------------ // Hvad er der klikket på? String string = (String)model.getValueAt( table.getSelectedRow(), table.getSelectedColumn() );
public class TableCellRenderTest { public static void main(String[] args) {
JFrame frame = new TableCellRenderFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
/* *Sætter JFrame i midten af skærmen */ int width = Toolkit.getDefaultToolkit().getScreenSize().width; int height= Toolkit.getDefaultToolkit().getScreenSize().height; frame.setLocation((width-frame.getSize().width)/2,(height-frame.getSize().height) / 2);
frame.show(); } }
class TableCellRenderFrame extends JFrame {
public TableCellRenderFrame() { setTitle("TableEditTest"); setSize(600, 250);
TableModel model = new MyTableModel(); JTable table = new JTable(model);
table.setDefaultRenderer(Color.class, new ColorTableCellRenderer()); table.setDefaultEditor(Color.class, new ColorTableCellEditor());
JComboBox combo = new JComboBox(); for (int i = 0; i <= 42; i++) combo.addItem(new Integer(i));
public String getColumnName(int c) { return columnNames[c]; }
public Class getColumnClass(int c) { return cells[0][c].getClass(); }
public int getColumnCount() { return cells[0].length; }
public int getRowCount() { return cells.length; }
public Object getValueAt(int r, int c) { return cells[r][c]; }
public void setValueAt(Object obj, int r, int c) { cells[r][c] = obj; }
public boolean isCellEditable(int r, int c) { /* * Kun disse felter vil jeg lade brugeren editere: */ return c == NAME_COLUMN || c == COMBO_COLUMN || c == CHECKBOX_COLUMN || c == COLOR_COLUMN; }
public static final int NAME_COLUMN = 0; public static final int COMBO_COLUMN = 2; public static final int CHECKBOX_COLUMN = 3; public static final int COLOR_COLUMN = 4;
/* * JTable data: */ private Object[][] cells = { { "Howdy", new Double(1337), new Integer(0), Boolean.FALSE, Color.yellow }, { "Dav", new Double(4711), new Integer(0), Boolean.FALSE, Color.yellow }, { "Jow jow", new Double(42), new Integer(1), Boolean.FALSE, Color.blue } };
Der er en fejl i det ovenstående.. du får lige det hele igen.. det er nemmere :) import java.awt.*; import java.awt.event.*; import java.util.*; import javax.swing.*; import javax.swing.event.*; import javax.swing.table.*;
public class TableCellRenderTest { public static void main(String[] args) {
JFrame frame = new TableCellRenderFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
/* *Sætter JFrame i midten af skærmen */ int width = Toolkit.getDefaultToolkit().getScreenSize().width; int height= Toolkit.getDefaultToolkit().getScreenSize().height; frame.setLocation((width-frame.getSize().width)/2,(height-frame.getSize().height) / 2);
frame.show(); } }
class TableCellRenderFrame extends JFrame {
public TableCellRenderFrame() { setTitle("TableEditTest"); setSize(600, 250);
TableModel model = new MyTableModel(); JTable table = new JTable(model);
table.setDefaultRenderer(Color.class, new ColorTableCellRenderer()); table.setDefaultEditor(Color.class, new ColorTableCellEditor());
JComboBox combo = new JComboBox(); for (int i = 0; i <= 42; i++) combo.addItem(new Integer(i));
public String getColumnName(int c) { return columnNames[c]; }
public Class getColumnClass(int c) { return cells[0][c].getClass(); }
public int getColumnCount() { return cells[0].length; }
public int getRowCount() { return cells.length; }
public Object getValueAt(int r, int c) { return cells[r][c]; }
public void setValueAt(Object obj, int r, int c) { cells[r][c] = obj; }
public boolean isCellEditable(int r, int c) { /* * Kun disse felter vil jeg lade brugeren editere: */ return c == NAME_COLUMN || c == COMBO_COLUMN || c == CHECKBOX_COLUMN || c == COLOR_COLUMN; }
public static final int NAME_COLUMN = 0; public static final int COMBO_COLUMN = 2; public static final int CHECKBOX_COLUMN = 3; public static final int COLOR_COLUMN = 4;
/* * JTable data: */ private Object[][] cells = { { "Howdy", new Double(1337), new Integer(0), Boolean.FALSE, Color.yellow }, { "Dav", new Double(4711), new Integer(0), Boolean.FALSE, Color.yellow }, { "Jow jow", new Double(42), new Integer(1), Boolean.FALSE, Color.blue } };
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.