JList oder JTable?

Status
Nicht offen für weitere Antworten.

Dit_

Bekanntes Mitglied
Hallo zusammen!

follgendes Problem.

Gegeben ist eine Liste mit Daten
zB

HTML:
Slot | Name | Punkte | Ping
---------------------------
1      Dit      10000     15
4      pls      443       11

usw...

diese daten bekomme ich von einem Spielserver in einem 1sek-takt. Jetzt aber weiss ich nicht wie ich diese sich ständig ändernde Daten darstellen soll. Das problem ist ich brauche noch "Rechtsklick-Funktion" so dass ich auf einen der Spieler mit der rechten Maustaste klicken kann und dann bestimmte funktionen aktivieren...


Was soll ich benutzen JList oder JTable ?


P.S. bei JTable kann ich setEditable(false) nicht nutzen :(

danke schonmal :)
gruss
 

Dit_

Bekanntes Mitglied
Hallo Danke erstmal :)

Java:
{
				TableModel model1 = new DefaultTableModel(alliesDaten, spaltenNamen); 
				tabelleAllies = new JTable();
				tabelleAllies.setModel(model1);
				tabelleAllies.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
				tabelleAllies.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);				
				tabelleAllies.setColumnSelectionAllowed(false);
				tabelleAllies.setRowSelectionAllowed(true);
				tabelleAllies.setBackground(new java.awt.Color(128, 128, 255)); //blau
				//tabelleAllies.setShowHorizontalLines(false);
				//tabelleAllies.setShowVerticalLines(false);
				

				TableColumn slot = tabelleAllies.getColumnModel().getColumn(0);
				TableColumn name = tabelleAllies.getColumnModel().getColumn(1);
				TableColumn xp = tabelleAllies.getColumnModel().getColumn(2);
				TableColumn ping = tabelleAllies.getColumnModel().getColumn(3);

				slot.setPreferredWidth(25);
				name.setPreferredWidth(170);
				xp.setPreferredWidth(55);
				ping.setPreferredWidth(35);

			}

ich habe also die Hintegrundfarbe gesetzt, aber es funktioniert irgendwie nicht so richtig, es wird zwar blau, nicht aber die ganze tabelle... nur der bereich in dem Zeilen vorhanden sind. In meinem Fall habe ich 2 Tabellen neben einander die eine soll Team A (Rot) die andere Team B (Blau) darstellen, wenn ich in team A 10 spieler habe und in Team B 8, dann ist das ganze ungleich gefärbt :(
Weiss jem wie ich das beheben kann ?
 

Ebenius

Top Contributor
Die Tabelle ist nur so groß wie ihre Zellen. Das was Du noch grau siehst ist nicht die Tabelle, sondern der JViewport auf dem sie liegt. Der Quelltext wo das rein muss fehlt jetzt oben, in etwa so geht's:
Java:
final JScrollPane sp = new JScrollPane(tabelleAlias);
sp.getViewport().setBackground(YOURCOLOR);
someContainer.add(sp);
Ebenius
 

Dit_

Bekanntes Mitglied
hallo nochmal, wollte nicht neues Thema starten...

wie mache ich denn eine leere Zeile nicht auswählbar ?
Problem ist ja, dass wenn ich Programm starte, braucht ja mein "AbstractTableModel"
anzahl der Zeilen und Spalten, deswegen muss ich am Anfang der Klasse

Java:
private String[][] axisDaten 			 = new String[16][4];
deklarieren, sonst gibt es Null-Fehler... Jetzt passiert follgendes, wenn in dem Team nur 10 spieler sind, dann sind die restlichen 6 Zeilen leer... hässlich..

was mir halt einfällt, die leeren Zeile zu deaktivieren soweit das möglich ist...


Java:
tableModelAxis = new AbstractTableModel() {

					public String getColumnName(int col) {
						return spaltenNamen[col].toString();
					}

					@Override
					public Object getValueAt(int rowIndex, int columnIndex) {
						return axisDaten[rowIndex][columnIndex];
					}

					@Override
					public int getRowCount() {
						return axisDaten.length;
					}

					@Override
					public int getColumnCount() {
						return spaltenNamen.length;
					}

					@Override
					public boolean isCellEditable(int row, int col) {
						return false;
					}

					@Override
					public void setValueAt(Object value, int row, int col) {
						axisDaten[row][col] = (String) value;
						fireTableCellUpdated(row, col);
					}

				};

gruss
 

hdi

Top Contributor
Ich würde gleich von dem Ansatz mit dem Daten-Array weggehen. Mach dir ne Liste und verwende die. Dann ist dein Table voll dynamisch und du hast auch nicht mehr Zeilen als Spieler in der Tabelle.

Java:
class MyTableModel extends AbstractTableModel{

     private List<YourData> data;
 
     public MyTableModel(){
           data = new ArrayList<YourData>();
     }

     public void addData(YourData newData){
           data.add(newData);
           fireTableDataChanged();
     }

     // die restlichen Methoden überschreiben, wie du es davor gemacht hast, 
     // aber dann halt die Liste verwenden. Also zB:

     @Override
      public int getRowCount() {
             return data.size();
      }
}

und dann erzeugst du eine Instanz dieses Models, befüllst es mit der addData()-Methode und fertig
 

Dit_

Bekanntes Mitglied
Hi
eigentlich arbeite ich die ganze Zeit mir zB
Java:
ArrayList<SpielerInfo> axisListe

konnte aber nicht rausfinden wie man die tabelle mit daten aus dieser liste füllt. Deswegen konvertierte ich im letzten Schritt ArryList zu String[][] :oops:

hier ist meine tableModel definition:


Java:
// AXIS//
			{
				tableModelAxis = new AbstractTableModel() {

					public String getColumnName(int col) {
						return SPALTEN[col].toString();
					}

					@Override
					public Object getValueAt(int rowIndex, int columnIndex) {
						return axisDaten[rowIndex][columnIndex];
					}

					@Override
					public int getRowCount() {
						return axisDaten.length;
					}

					@Override
					public int getColumnCount() {
						return SPALTEN.length;
					}

					@Override
					public boolean isCellEditable(int row, int col) {
						return false;
					}

					@Override
					public void setValueAt(Object value, int row, int col) {
						axisDaten[row][col] = (String) value;
						fireTableCellUpdated(row, col);
					}

				};


und dann später methode aktualisiere();

Java:
for (int zeileAxis = 0; zeileAxis < axisListe.size(); zeileAxis++){
			tableModelAxis.setValueAt(axisListe.get(zeileAxis).getSlot(),zeileAxis, 0);
			tableModelAxis.setValueAt(axisListe.get(zeileAxis).getName(),zeileAxis, 1);
			tableModelAxis.setValueAt(axisListe.get(zeileAxis).getXP(),zeileAxis, 2);
			tableModelAxis.setValueAt(axisListe.get(zeileAxis).getPing(),zeileAxis, 3);
		}

wie kann ich die daten direkt aus der Liste nehmen, mit setValue geht ja nicht ???:L

muss ich dann für alle Tabellen neue TableModelKlasse erstellen ? und dann so vorgehen wie du beschrieben hast ?
 

Java@home

Aktives Mitglied
Hi, ich hoffe ich bin hier nicht ganz auf einem falschen Dampfer, aber mit remove(Obj o); kannst du aus der Liste die Daten raus nehmen, du kannst die List auch iterieren und iterator.remove(); damit nimmt man alles raus!
Hoffe nur(Ohne alles durch zu lesen) dass, es zum Thema passt!
MFG
 

Dit_

Bekanntes Mitglied
Hmmm...
wenn ich mit ArrayList arbeite wie soll ich dann
Java:
 @Override
                    public Object getValueAt(int rowIndex, int columnIndex) {
                        return axisDaten[rowIndex][columnIndex];
                    }

umschreiben ? Ich kann doch jetzt nicht mehr mit
Java:
int rowIndex, int columnIndex
auf die daten zugreifen?

@ Java@home
mir gehts mehr darum die daten zu aktualisieren ohne sie vorher zu löschen :)
 

hdi

Top Contributor
Also das ist ganz einfach. Du musst dir eigene add/remove/change Methoden schreiben, die entsprechendes mit den Daten in der Liste machen, und danach ein passendes Event feuern, sodass der Table (die View) sich aktualisiert.

Natürlich kannst du noch mit rowIndex und modelIndex arbeiten, aber es geht halt jetzt nicht mehr "direkt". Aber:

Java:
 @Override
        public Object getValueAt(int rowIndex, int columnIndex) {
                YourData theData = data.get(rowIndex);
                switch(columnIndex){
                     case 0: return theData.getName();
                     case 1 : return theData.getIP();
                     // ...
                     default: return null;
                 }
         }

Damit sich keine Fehler einschleichen würde ich mir für die Spalten-Indices in der Klasse noch Konstanten erstellen. Also

Java:
public static final int NAME = 0;
public static final int IP= 1;

und dann halt

Java:
  @Override
        public Object getValueAt(int rowIndex, int columnIndex) {
                YourData theData = data.get(rowIndex);
                switch(columnIndex){
                     case NAME: return theData.getName();
                     case IP : return theData.getIP();
                     // ...
                     default: return null;
                 }
         }
 

Dit_

Bekanntes Mitglied
Danke sehr!
mache mich sofort an die Arbeit :)


P.S. Danke hdi funktioniert alles wunderbar! :)
 
Zuletzt bearbeitet:

Dit_

Bekanntes Mitglied
Nächste Frage :)

Soll ich für meine Tabelle extra Klasse (als GUI Komponent) anlegen? Wenn ja, wie soll ich dann diese Tabelle aktualisieren? Ich meine, wer macht das dann modell, kontroller, oder meine "GUI-Oberklasse".
Ist es eigentlich OK wenn ich für meine GUI nur eine Klasse verwende?

Danke schon mal...
 
Zuletzt bearbeitet:
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M JList wird angezeigt, JTable (DefaultTableModel) nicht AWT, Swing, JavaFX & SWT 7
H Swing JList/JTable mit JButton, JTextField, Image, JComboBox und JLable AWT, Swing, JavaFX & SWT 2
L SQL & Jtable o. JList AWT, Swing, JavaFX & SWT 5
N JList in JTable einfügen AWT, Swing, JavaFX & SWT 13
M Java Applet JTable/JList AWT, Swing, JavaFX & SWT 6
X Swing Models (JTable, JList etc.) statisch deklarieren ? AWT, Swing, JavaFX & SWT 18
J JList-Item ind JTable-Zelle auswählen. AWT, Swing, JavaFX & SWT 5
P Mischung aus JTable und JList AWT, Swing, JavaFX & SWT 7
B Jlist füllen AWT, Swing, JavaFX & SWT 4
H JList.setEnabled(false) - Text soll nicht grau sein AWT, Swing, JavaFX & SWT 2
BananenBrötchen Swing Arraylist in jList anzeigen AWT, Swing, JavaFX & SWT 6
J Swing JList wird nicht angezeigt AWT, Swing, JavaFX & SWT 6
A Swing JList zu JTree AWT, Swing, JavaFX & SWT 11
G Eingabe in JTextField in Array speichern und in JList ausgeben AWT, Swing, JavaFX & SWT 7
cezary Choice, JComboBox oder JList AWT, Swing, JavaFX & SWT 5
J JList scrollen AWT, Swing, JavaFX & SWT 3
Neumi5694 Swing JList - Klick abfangen AWT, Swing, JavaFX & SWT 3
G Swing Swing Binding JList funktioniert nicht AWT, Swing, JavaFX & SWT 5
M Swing JList Auswahl-GUI-Konzept AWT, Swing, JavaFX & SWT 9
C JList: Bestimmte Objekte ausschließen AWT, Swing, JavaFX & SWT 1
F JList aktualisiert nicht AWT, Swing, JavaFX & SWT 24
F JList auffüllen aus Array von Instanzen AWT, Swing, JavaFX & SWT 4
F Event wenn Maus eine JList verlässt AWT, Swing, JavaFX & SWT 13
F JList bei Windowbuilder AWT, Swing, JavaFX & SWT 8
F JList zeigt keine Einträge mehr AWT, Swing, JavaFX & SWT 1
P JList erstellen AWT, Swing, JavaFX & SWT 4
G DefaultListModel für JList AWT, Swing, JavaFX & SWT 2
P Einer JList mit eigenem ListModel einen Eintrag hinzfügen AWT, Swing, JavaFX & SWT 5
P Übergeben von ListModel an nichtparametrisierte JList AWT, Swing, JavaFX & SWT 8
M Ein Element in mehreren JList selektieren AWT, Swing, JavaFX & SWT 5
J Swing Probleme mit ListSelectionListener(), Inhalte der JList werden gelöscht? AWT, Swing, JavaFX & SWT 6
Z Swing Variable eines Objekt aus Hashmap in JList anzeigen AWT, Swing, JavaFX & SWT 1
Nabbit Über JList kein JPopupMenu AWT, Swing, JavaFX & SWT 2
O Swing JList beim Klicken in der GUI erstellen AWT, Swing, JavaFX & SWT 6
C Swing JList zeigt keine neuen Einträge an AWT, Swing, JavaFX & SWT 1
B Swing Auf JList-Elemente aus einer anderen Klasse zugreifen AWT, Swing, JavaFX & SWT 1
T Generische Klasse in JList über DefaultListModel AWT, Swing, JavaFX & SWT 1
T Swing WindowBuilder: JList wird nicht angezeigt AWT, Swing, JavaFX & SWT 2
C Button Text in JList neue Zeile AWT, Swing, JavaFX & SWT 6
C Hilfe bei JSpinner und JList AWT, Swing, JavaFX & SWT 1
D Swing ArrayList in Jlist/ List oder Array in JList/List AWT, Swing, JavaFX & SWT 5
S JList ist leer, aber DefaultListModel hat die Daten? AWT, Swing, JavaFX & SWT 9
D Swing Jlist Größe während der Laufzeit verändern. AWT, Swing, JavaFX & SWT 11
Q JList Update Problem AWT, Swing, JavaFX & SWT 1
W Sichtbarer Bereich JScrollPane vs. JList AWT, Swing, JavaFX & SWT 3
N AWT Markierte Zeile jList aus mySQL DB löschen AWT, Swing, JavaFX & SWT 2
S JList repaint AWT, Swing, JavaFX & SWT 1
F Swing JTextField in JList (Funktion beibehalten) AWT, Swing, JavaFX & SWT 2
H JList AWT, Swing, JavaFX & SWT 5
B Swing Bild von Webseite herunterladen, diese dann in JList anzeigen. AWT, Swing, JavaFX & SWT 1
B Swing Dynamische JList mit Bildern AWT, Swing, JavaFX & SWT 4
D JList&JButton erst nach Resize des JFRame sichtbar AWT, Swing, JavaFX & SWT 2
S JList Index finden AWT, Swing, JavaFX & SWT 6
3 Swing JList-Inhalt als verschlüsselte Datei schreiben und lesen AWT, Swing, JavaFX & SWT 1
N JComponenten in JList oder doch anders? AWT, Swing, JavaFX & SWT 0
S Swing JList, ArrayList + DefaultModel AWT, Swing, JavaFX & SWT 5
B Tabelleneinträge in JList anzeigen AWT, Swing, JavaFX & SWT 5
P JList/JScroolPane Text verschieben und text wrappen AWT, Swing, JavaFX & SWT 3
D Swing JList keine Selektionsänderung bei "dragged-Maus" AWT, Swing, JavaFX & SWT 4
M JList Model filtern AWT, Swing, JavaFX & SWT 4
K Swing JList - Element richtig hinzufügen AWT, Swing, JavaFX & SWT 4
T Swing Elemente der JList überlappend darstellen AWT, Swing, JavaFX & SWT 5
P Swing JList mit Objekten - Name anzeigen AWT, Swing, JavaFX & SWT 5
Ollek JList - neuer Eintrag in ArrayList dadurch keine Anzeige der Objekte AWT, Swing, JavaFX & SWT 18
K Mehrfachselektierungen in einer JList AWT, Swing, JavaFX & SWT 6
L Swing Component alignment innerhalb einer JList AWT, Swing, JavaFX & SWT 3
M Swing JList Listener AWT, Swing, JavaFX & SWT 20
M Accelerator zu JMenuItem des JPopupMenu einer JList AWT, Swing, JavaFX & SWT 2
S Swing JList wird nicht angezeigt AWT, Swing, JavaFX & SWT 3
M Element aus JList eines JFileChooser entfernen AWT, Swing, JavaFX & SWT 3
E selektierter Datensatz in JList als String Datentyp AWT, Swing, JavaFX & SWT 23
E selektiertes Element aus JList zurückgeben AWT, Swing, JavaFX & SWT 7
E JList /DefaultListModel mit Datenbank verbinden AWT, Swing, JavaFX & SWT 10
K Swing JList und veränderte CellRenderer AWT, Swing, JavaFX & SWT 8
B JList + ListCellRenderer AWT, Swing, JavaFX & SWT 5
B JList -> Disabled AWT, Swing, JavaFX & SWT 6
J JList, Anzeige aktualisieren AWT, Swing, JavaFX & SWT 7
I Jlist isselectionEmpty AWT, Swing, JavaFX & SWT 4
I Jlist dynamisch aus Datenbank füllen AWT, Swing, JavaFX & SWT 14
R Swing unbegrenzte Anzahl vonEinträgen in JList AWT, Swing, JavaFX & SWT 2
MiMa Dateien aus Ordner in einer JList Ausgeben AWT, Swing, JavaFX & SWT 32
P Elemente einer JList ausgeben AWT, Swing, JavaFX & SWT 11
M JList mit 2-zeiligen Objekten füllen AWT, Swing, JavaFX & SWT 7
S JList mit Einträgen versehen schlägt fehl AWT, Swing, JavaFX & SWT 4
F Swing ArrayList in JList anzeigen und Objekte auswählen AWT, Swing, JavaFX & SWT 2
B JList zeigt Elemente nicht an AWT, Swing, JavaFX & SWT 3
S Fragen zu JList AWT, Swing, JavaFX & SWT 3
B Aktualisierung einer JList AWT, Swing, JavaFX & SWT 5
W JList valueChanges weiterleiten? AWT, Swing, JavaFX & SWT 14
D JButton-Click in JList mit Panels (auf dem der Button ist) AWT, Swing, JavaFX & SWT 6
E Jlist nur mit Klasse? AWT, Swing, JavaFX & SWT 5
D Swing JList <-> AdapterModel <-> Model AWT, Swing, JavaFX & SWT 4
1 JList - Elemente mit rechter Maustaste wählen AWT, Swing, JavaFX & SWT 6
M JList mit DefaultListModel und listener AWT, Swing, JavaFX & SWT 4
B JList nach dem Rendern sortieren AWT, Swing, JavaFX & SWT 3
T Wie ist das "Lookup-Verhalten" von JList, JCombobox änderbar? AWT, Swing, JavaFX & SWT 4
D JList items voneinander trennen AWT, Swing, JavaFX & SWT 10
E Keine Ausgabe von JList bei drücken von Button auf die Konsole AWT, Swing, JavaFX & SWT 7
M gleiches Element in JList mehrmals hintereinander auswählen AWT, Swing, JavaFX & SWT 6
T JList und Objekte AWT, Swing, JavaFX & SWT 7

Ähnliche Java Themen


Oben