20. januar 2003 - 10:49Der er
14 kommentarer og 1 løsning
Placering af JTable
Jeg har et panel som indeholder en JScrollPane. Denne JScrollPane har en viewport som er et JTable. Det er engang lykkedes mig, at få vist dette JTable nederst i panelet... så hver gang, der blev tilføjet en række, arbejdede tabellen sig opad... (gir' det mening?)
Men jeg kan s.. ikke huske hvordan jeg gjorde! Er der nogen der kan hjælpe mig på vej?
I dette særtema om aspekter af AI ser vi på skiftet fra sprogmodeller til AI-agenter, og hvordan virksomheder kan navigere i spændet mellem teknologisk hastighed og behovet for menneskelig kontrol.
public String getNavn() { return navn; } public String getNummer() { return nummer; } public void setNavn(String navn) { this.navn = navn; } public void setNummer(String nummer) { this.nummer = nummer; } } //VectorTableModel.java
import javax.swing.table.AbstractTableModel;
import java.util.Vector;
public class VectorTableModel extends AbstractTableModel { private String[] columns = { "Navn", "Antal gram", "I alt" }; private Vector data;
public VectorTableModel() { data = new Vector(); }
public int getColumnCount() { return columns.length; }
public int getRowCount() { return data.size(); }
public String getColumnName(int column) { return columns[column]; }
public Object getValueAt(int row, int column) { TableElement element = (TableElement)data.elementAt(row); String value = ""; switch( column ) { case 0: { value = element.getNavn(); } break; case 1: { value = element.getNummer(); } break; } return value; }
public Class getColumnClass(int c) { return getValueAt(0, c).getClass(); }
public boolean isCellEditable(int row, int col) { return false; }
public void setValueAt(Object value, int row, int column) { switch( column ) { case 0: { ((TableElement)data.elementAt(row)).setNavn((String)value); } break; case 1: { ((TableElement)data.elementAt(row)).setNummer((String)value); } break; } fireTableCellUpdated(row, column); }
public void addTableElement(TableElement element) { data.add(element); fireTableRowsInserted(data.size(), data.size()); }
Du kan så bare selv tilpasse VectorTableModel til dine behov.. public class VectorTableModel extends AbstractTableModel { private String[] columns = { "Dit_valg_til_kolonne1", "Dit_valg_til_kolonne2", "Dit_valg_til_kolonne3" ... }; ... }
Hmm... så vidt jeg umiddelbart kan se, sker der da ikke noget i koden, der får tabellen til at være placeret nederst i panelet! Helt præcist hvor gør du det?
Selvfølgelig kunne du bruge setBounds på dit panel.. men det er da noget værre noget at have en container med null layout til at indeholde din tabel, det skulle jo helst være dynamisk.
Jeg kunne ikke være mere enig... men som jeg skrev tidligere, (og som målet med spørgsmålet er) har jeg tidligere fået den til at starte nedefra, og arbejde sig opad... Og det er hvad jeg gerne vil have gjort igen! Jeg kan skam godt lave et jtable... det er IKKE problemet.
Jeg prøver lige at forklare "nederst" igen!
Jeg har et panel, som er fx. 500 px højt. Deri er en scrollpane, og i denne scrollpane ligger et jtable. Når der kommer én række i dette jtable, ligger denne række sig nederst i panelet. Og derved også nederst i panelet. Når der så kommer endnu en række i tabellen, rykker den første række sig op, og den sidstankomne ligger nu nederst.
Jaa, det er forståeligt, men jeg ved ikke hvilket layout der har givet det den opførsel - udover naturligvis selv at flytte tabellen opad med null layout.
Jeg er ret sikker på at panelet havde borderlayout på det tidspunkt... Så jeg tror næsten at det må være selve tabellen eller scrollpane'et der har fået noget specielt layout...
Jeg lukker... for en gang skyld, var der ingen hjælp at hente på eksperten :(
Synes godt om
Ny brugerNybegynder
Din løsning...
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.