Swing zellen fixen

execute

Mitglied
wieder einmal hallo liebe Javagemeinde 🙂

habe gegoogelt, anscheinend gebe ich immer die falschen suchbegriffe ein. Hoffe mir kann hier jemand helfen, konntet ihr ja bis jetzt immer 😉

problem, jtable mit vector objekten, liegt auf einer scrollpane, die wiederum auf einem jpanel liegt 🙂


folgende probleme:

1.
Das JPane is zu groß oder das scrollpane, was auch immer, will ich kleiner haben 🙁
methode welche das regeln könnte finde ich aber einfach nicht..
sethight?
und mit setsize bekomm iches auch iwie net gebacken...
bei bedarf kopier ich gern den code hier rein, falls problem ungenau beschrieben ist 🙂
kann mir jemand sagen wie ich höhe vom festern regeln kann?


2.
wie oben schon beschrieben, zellen fixxen..
habe eine klasse Waren, mit der Eigenschaft preis, menge bez, eine arraylist mit vielen Waren, ein eingabefeld wo diese daten eben eingegeben werden und eine tabelle wo diese angezeigt werden, hoffe verständlich^^.
nun, wenn ich in tabelle was anscheinend durch scrollpane möglich is in der zelle daten ändere, wird eben nicht die arraylist editiert, das zu realisieren is glaub ich für mich zu komplex oder?
ich tippe einfach ma auf ja, weshalb ich eben auf die lösung zurückgreifen muss, dass man tabellenzellen fixxen muss, methode hab ich aber auch da nicht gefunden, iso wie
fixbooth wäre nice 😉

3.

kann es sein, dass es beim coden viel schwerer is ein projekt in viele klasse zu unterteilen(zwecks wiederverwendung,wartung etc) als einfach alles in eine klasse reinzustecken?
bei aufteilung hab ichs nicht geschafft, dass alles zusammen arbeitet so iwie schon 😀



hoffe mir kann jemand helfen und wenns nur frage 3 is, würde mich echt ma interessieren ^^

schonma danke 🙂
 
1.
Das JPane is zu groß oder das scrollpane, was auch immer, will ich kleiner haben 🙁
methode welche das regeln könnte finde ich aber einfach nicht..
Hängt u.a. vom LayoutManager ab. Wie solls denn aussehen?


kann mir jemand sagen wie ich höhe vom festern regeln kann?
Auch hier, hängt oft vieles vom LayoutManager ab. Oftmals hilft das Setzen der bevorzugten Größe einer Komponente. Component#setPreferredSize()


2.
nun, wenn ich in tabelle was anscheinend durch scrollpane möglich is in der zelle daten ändere, wird eben nicht die arraylist editiert, das zu realisieren is glaub ich für mich zu komplex oder?
Hab dich hier nur teilweise verstanden. Du brauchst ein TableModel, welches der JTable bekannt gemacht wird. Wenn es ein DefaultTableModel ist, funktioniert die Kommunikation zwischen Model und Tabelle automatisch, weil alles fertig implementiert ist. Wenn du ein eigenes Model gebaut hast, musst du ganz bestimmte Methoden einsetzen, die das Model über Änderungen in der Tabelle informieren. Mehr dazu auch in der FAQ.


3.
kann es sein, dass es beim coden viel schwerer is ein projekt in viele klasse zu unterteilen(zwecks wiederverwendung,wartung etc) als einfach alles in eine klasse reinzustecken?
bei aufteilung hab ichs nicht geschafft, dass alles zusammen arbeitet so iwie schon 😀
Wenn man grundlegende Fehler baut, weil man sich nicht genügend mit der Materie beschäftigt hat, oder sie noch nicht verstanden hat, hat man's eben schwer. Programmieren ist eben mehr, als nur Funktionen in Klassen zu verteilen. 😉
 
ok schonmal danke,

1. eben nicht über den halben bildschirm^^

keine Ahnung zb so, dass maximal 7 zeilen angezeigt werden bevors zum scrollen übergeht.


-werde ich gleich ma testen, danke 😉


2. ich will die zellen der Tabelle fixxen sodass nix mehr geändert werden kann, jetzt kann ich doppelklick auf zelle machen und kann neue Daten eintragen, mag ich aber nüt


3. hast du mich nur bestätigt, ich bastel mir was zam iwan funktioniert es aber begriffen habe ich nicht alles...
komm einfach nicht ins objektorientierte denken rein oder schon, ich weiß es nicht
 
😀
@ camino habe vorher zufällig die Methode setEnabled() von Jtable gefunden, nun, einfach false als parameter mitgegeben und schon ises auch nimmer editierbar kp warum, soll ja nur funktionieren 🙂)


isCelleditable, muss ich wahrscheinlich über jeden einzelnen tupel drüber laufen lassen oder?
werde ich auch ma testen thx
 
Wie schon gesagt: "isCellEditable" ist eine Methode vom TableModel.
siehe: TableModel (Java Platform SE 6)

isCelleditable, muss ich wahrscheinlich über jeden einzelnen tupel drüber laufen lassen oder?
Das macht dann eigentlich das TableModel für dich...

Code:
public boolean isCellEditable(int rowIndex, int columnIndex)
Dort kannst du dann genauer angeben, ob und welche Zeile bzw. Spalte editierbar (oder nicht) sein soll. Kannst aber auch bei allen Zellen (Zeilen und Spalte) false zurückgeben lassen, wenn du keine Möglichkeit zum Editieren für die komplette Tabelle haben möchtest.

Mit der Methode setEnabled(false) von JTable könnte wohl passieren, dass du dann keinen Zugriff mehr auf die Tabelle hast, also auch evtl. nicht mehr Zeilen oder Zellen selektieren kannst. Je nachdem, was du mit der JTable später noch vorhast. Das TableModel lohnt sich auf jeden Fall mal anzuschauen, ist auch nicht so kompliziert. Das TableModel kannst du einfach der Tabelle mit übergeben.
 
Zuletzt bearbeitet von einem Moderator:
so, vielen Dank ihr 2 🙂


@L-ectron-X


das mit setPrefsize hat funktioniert, rest auch,

@Camino

tablemodel benutzen funktioniert auch,

mit isCellEditable kämpf ich noch, scheine ich iwie eine 2 dimensionale vorschleife zu brauchen 😵

mhh, beta von projekt is fertig, will es jemand haben :>
schöner und besser als jede vorher gekannte app 🙂
 
mit isCellEditable kämpf ich noch, scheine ich iwie eine 2 dimensionale vorschleife zu brauchen

Nee, eigentlich musst du von der Methode nur einen boolean-Wert zurückgeben lassen. Wenn du in die Methode nur
Code:
return false;
reinschreibst, sind alle Zellen nicht editierbar, da immer - egal welcher Zeilen- oder Spaltenindex - false zurückgeliefert wird. Du kannst aber auch je nach Wert für Zeile oder Spalte nur bestimmten Zellen editierbar oder nicht editierbar machen. Z.B.:
Java:
if(colIndex == 2)
    return true;
else
    return false;
Dann ist nur die eine Spalte editierbar, die restlichen nicht.
 

Zurück
Oben