Frage zu JTable

Status
Nicht offen für weitere Antworten.

the_brain

Mitglied
Brauche zum programmieren eines Datei Explorers ein JTable.
Ich hab ein Fenster mit einer JSplitPane. Im linken Fenster hab ich einen JTree der die Verzeichnisse der Festplatte ausliest und auflistet. Auf der rechten Seite möchte ich nun ein JTable verwenden.

Kann mir jemand weiterhelfen wie ich dieses JTable implementieren muss damit die Ordner und Dateien angezeigt werden. Hab mit JTable bis jetzt noch nicht gearbeitet, deshalb hab ich noch keine Erfahrung damit.

Hoff jemand hat ein paar Tipps für mich!

Danke im Vorhinein!
 
R

Roar

Gast
mann, du hast ein sau glück dass ich zur zeit genau das gleiche mache :p
also ein biss lerklärung: ich hab mir einige eklassen geschrieben:
FileTable extends JTable
FileTableCellRenderer implements TableCellRenderer
FileTableCellEditor extends DefaultCelEditor
FileTableEditingCell extends JPanel implements KeyListener

hmmjaa...
ok in meinen JTree hab ich erst nen selectionListener eingebaut, und dann wird das aufgerufen:
Code:
	public void updateTableData(File parent) {
		File[] childs = parent.listFiles();
		model.setRowCount(0); // model == DefaultTableModel
		for(int i=0; i<childs.length; i++) {
			model.addRow(new File[]{childs[i], childs[i], childs[i], childs[i]}); // Files als TableValue, werden im Renderer verarbeitet
		}
		updateStatusBar(parent); /// statusleiste
	}

dann ein bisschen renderer:

Code:
	public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
		JLabel label = new JLabel(value.toString());
		String columnName = (String)table.getColumnModel().getColumn(column).getHeaderValue();
		FileSystemView fsv = FileSystemView.getFileSystemView();
		File f;
		if(value instanceof File) {
			f = (File)value;
		} else {
			((FileTableCellEditor)table.getDefaultEditor(Object.class)).cancelEditing(row, column);
			f = (File)table.getValueAt(row, column);
		}
		if(columnName.equals("Name")) {
			label = new JLabel(fsv.getSystemDisplayName(f), fsv.getSystemIcon(f), SwingConstants.LEFT);
		} else if(columnName.equals("Size")) {
			label = new JLabel(Math.round((float)(f.length()/1024))+" KB", SwingConstants.RIGHT);
		} else if(columnName.equals("Type")) {
			label = new JLabel(fsv.getSystemTypeDescription(f));
		} else if(columnName.equals("Last modified")) {
			label = new JLabel(new SimpleDateFormat("dd.MM.yyyy HH:mm").format(new Date(f.lastModified())));
		}
// ... blablabla das JLabel designen und so

so, und das wär auch schon der anfang. ich hab jetzt noch nen eigenen Editor geschrieben und das andere ist ein Cmponent der zum editeiren angezeigt wird (siehtso aus wie im explorer)

Code:
	public FileTableCellEditor(JTable table) {
		super(new JTextField());
		this.table = table;
	}

	public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
		String columnName = (String)table.getColumnModel().getColumn(column).getHeaderValue();
		File f = (File)value;
		if(columnName.equals("Name") && isSelected) {
			editorComponent = new FileTableEditingCell(f, this);
			return editorComponent;
		}
		return null;
	}
	
	public void cancelEditing(int row, int col) {
		if(editorComponent != null) {
			File f = editorComponent.getFile();
			File newFile = new File(f.getParent()+ "\\" + editorComponent.getText());
			f.renameTo(newFile);
			newFile.setLastModified(System.currentTimeMillis());
			((DefaultTableModel)table.getModel()).insertRow(row, new File[]{newFile, newFile, newFile, newFile});
			((DefaultTableModel)table.getModel()).removeRow(row+1);	
		}
		editorComponent = null;
		cancelCellEditing();
	}
	
	public void cancelEditing(String newName) {
		File f = (File)table.getValueAt(table.getSelectedRow(), table.getSelectedColumn());
		File newFile = new File(f.getParent()+ "\\" + newName);
		f.renameTo(newFile);
		newFile.setLastModified(System.currentTimeMillis());
		((DefaultTableModel)table.getModel()).insertRow(table.getSelectedRow(), new File[]{newFile, newFile, newFile, newFile});
		((DefaultTableModel)table.getModel()).removeRow(table.getSelectedRow()+1);
		cancelCellEditing();
	}

und der component:

Code:
class FileTableEditingCell extends JPanel implements KeyListener {
	
	protected JTextField tf;
	protected JLabel icon;
	protected File f;
	private TableCellEditor editor;
	
	public FileTableEditingCell(File f, TableCellEditor editor) {
		FileSystemView fsv = FileSystemView.getFileSystemView();
		tf = new JTextField(fsv.getSystemDisplayName(f), 20);
		icon = new JLabel(fsv.getSystemIcon(f));
		this.f = f;
		this.editor = editor;
		setLayout(new BorderLayout());
		add(icon, BorderLayout.WEST);
		add(tf, BorderLayout.CENTER);
		tf.addKeyListener(this);
	}
	
	public String getText() {
		return tf.getText();
	}
	
	public File getFile() {
		return f;
	}
	
	public void keyPressed(KeyEvent e) {
 		boolean stop = e.getKeyCode() == KeyEvent.VK_ENTER || e.getKeyCode() == KeyEvent.VK_TAB || e.isActionKey();
 		if(e.getKeyCode() == KeyEvent.VK_LEFT || e.getKeyCode() == KeyEvent.VK_RIGHT || e.getKeyCode() == KeyEvent.VK_CAPS_LOCK)
 			stop = false; 
 		if(stop) {
 			((FileTableCellEditor)editor).cancelEditing(tf.getText());
 		}
	}
	
 	public void keyReleased(KeyEvent e) {
 	}
 	
 	public void keyTyped(KeyEvent e) {
 	}
}

so, ich hoffe das bisschen kann dir als ansatz dienen.
wenn du noch fragen hast...
mann hast du ein glück. das hab ich in dne letzten tagen geschrieben :lol:

edit: oaa geil, ich hab ne ausführlicherer antwort als Beni geschrieben :D
 
B

bygones

Gast
L-ectron-X hat gesagt.:
Toll, damit ist einem, der noch nie Code von JTable gesehen hat wirklich geholfen... :?
JTable ist eine sehr mächtige und komplizierte Komponente, da kann man doch etwas Hilfe erwarten, oder?
Einfache Links in die API-Dok kann auch eine Klofrau posten. :lol:
Naja, wenn man aber noch nie mit ner Table gearbeite hat wird einem Roars Code auch nichts helfen. Außerdem denk ich sollte man sich erstmal die Basics anschauen (also API und HOW TOs).

Wie du richtig sagst ist JTable sehr mächtig, daher halte ich es für unsinnig diese hier komplett zu erklären !
Aber ich gebe dir recht - einen zusätzlichen Satz zu den Links hätte geholfen !
 

the_brain

Mitglied
Hallo Roar,

erstmals danke für dein Posting mit dem vielen Code. Leider, da ich mich mit JTable noch nicht wirklich auskenne blick ich da nicht ganz durch. Ich bin grad dabei ein TreeTable zu erstellen. Vielleicht könntest du mir dabei etwas helfen bzw. mir erklären wie ich das am besten angehen soll? Hab jetzt mal herumgedoktert und ein JTable erstellt und dies mit den Daten befüllt die ich aus der Festplatte ausgelesen habe. Nur dies bringt mir eigentlich genau Nüsse! Jetzt hab ich zwar die Ordner und Files in meiner Table drinnen, aber ich kann damit nichts anfangen - Arbeit bis jetzt umsonst!

Jetzt bin ich grad dabei ein TreeTable zu erzeugen, aber da blick ich im Moment nicht wirklich durch. Vielleicht könntest du mir da ein wenig weiterhelfen damit ich mal ein paar grundlegende Sachen in Richtung TreeTable hab.

Dies hab ich mal durchgesehen, aber so richtig schlau bin ich nicht draus geworden:
http://java.sun.com/products/jfc/tsc/articles/treetable1/index.html

Danke schonmal für deine Hilfe!

grüße!
 
R

Roar

Gast
Hallo,

ich hab noch nie mit TreeTable gearbeitet, und es bringt dir auch nicht mehr. TreeTable ist nur ein komponent der JTree und JTable vereinigt, es zeigt dir nicht automatisch deine ordner und files an, was du evtl. gedacht hast weil das auffem screenshot so aussieht.

mach lieber an deiner normalen JTable weiter. ich empfehle dir File-Objekte in die Table reinzuschreiben, und dann mit dem CelRenderer die entsprechenden daten darzustellen. dann kannst du dir die Files aus der Table rausholen und umbenenn oder löschen blahblah
 

the_brain

Mitglied
aha, also du meinst den TreeTable brauch ich doch nicht unbedingt? also ich hab jetzt die Ordner und Files aus meiner Festplatte in ein File Array eingelesen. Und dieses eindimensionale FileArray hab ich dann in ein 2dimensionales File Array gepackt und dieses hab ich dann der JTable mitgegeben. Wie gesagt hab ich jetzt Ordner und Files drinnen, jedoch hab ich hier keine Ordnerstruktur und weiß nicht wie ich jetzt so eine Ordnerstruktur wie bei einem JTree bekommen soll.
Kannst du mir da weiterhelfen was ich nun machen soll?
 

the_brain

Mitglied
bin noch auf ein problem gestoßen, und zwar möchte ich auch noch aus den dateien auslesen wann sie das letzte mal geändert wurden bzw. auch die größe

dies mach ich mit datei.lastModified und datei.length - nur bekomm ich hierbei eine long variable zurück. jetzt hab ich das problem, dass ich dies in einer Schleife durchlaufen lasse. die datein befinden sich in einem array und über einen index sprech ich die einzelnen dateien an und möchte diese mittels .lastModified auslesen wann sie das letzte mal geändert wurden. jedoch möchte ich dies wieder in einem array speichern und dann in ein 2dimensionales array packen und dieses der jtable übergeben.

funkt eigentlich schon recht gut, jedoch das problem, das ich hab ist, dass ich die mittels datei.lastModified erhaltene long variable nicht einem array zuweisen kann. funktioniert dies mittels casten? kann mir jemand weiterhelfen wie ich dies casten müsste, dasmit ich die lastModified Daten in einem Array speichern kann?`

danke für eure Tipps!
 
R

Roar

Gast
Hallo. zuerst zum JTree:
ich hab eine Klasse von JTree abgeletet und dies und das initialisiert, und einen TreeWillExpandListener reingehauen. diese methode ruft dann folgende auf:
Code:
	private void expandPath(DefaultMutableTreeNode d){
		d.removeAllChildren();
		File[] tempf=((TreeFile)d.getUserObject()).getFile().listFiles();
		Arrays.sort(tempf);
		DefaultMutableTreeNode tempd=null;
		for(int i=0; i<tempf.length; i++){
			if(tempf[i].isDirectory()){
				tempd = new DefaultMutableTreeNode(new TreeFile(tempf[i]));
				boolean hasChilds = false;
				File[] subs = tempf[i].listFiles();
				for(int j=0; j<subs.length; j++) {
					if(subs[j].isDirectory()) {
						hasChilds = true;
						break;
					}
				}
				if(hasChilds)
					tempd.add(new DefaultMutableTreeNode(null));
				d.add(tempd);
			}
		}
		treeModel.reload(d);
	}

so, und zu deinem zweiten problem:
Code:
String lastModified = new SimpleDateFormat("dd.MM.yyyy HH:mm").format(new Date(file.lastModified()));
 

the_brain

Mitglied
danke mal für deine antwort!

aber so recht versteh ich noch nicht was das genau macht?

lastModified = new SimpleDateFormat("dd.MM.yyyy HH:mm").format(new Date(file.lastModified()));

speziell dies hier versteh ich nicht: format(new Date(file.lastModified()));

was ist new Date genau? Ist dies eine Klasse? Muss ich diese zusätzlich noch erstellen od kann ich diese einfach importieren?
 
R

Roar

Gast
naja sorry, ist so meine art immer alles zu verschachteln und in eine Zeile zu schreiben, find ich übersichtlicher *g* :lol: :lol:
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Swing Frage zur Vorgehensweise (JTable?, JLabels?) AWT, Swing, JavaFX & SWT 8
S Frage zu Jtable / CellEditor AWT, Swing, JavaFX & SWT 1
N Swing JTable anfänger frage AWT, Swing, JavaFX & SWT 2
F unspezifizierte Frage zu JTable/ Model AWT, Swing, JavaFX & SWT 6
C jTable Frage zu setAutoCreateRowSorter AWT, Swing, JavaFX & SWT 6
G Frage zu JTable AWT, Swing, JavaFX & SWT 3
G Frage zu JTable und TableModel AWT, Swing, JavaFX & SWT 4
M Abhängige JTable - MCV - Frage zu Struktur AWT, Swing, JavaFX & SWT 5
J Frage zu JTable und der Überschrift/Titelzeile AWT, Swing, JavaFX & SWT 2
R Frage zu Listfeld oder jTable, auch andere Fragen AWT, Swing, JavaFX & SWT 5
M Frage zu JTabbedPane + JScrollPane + JTable AWT, Swing, JavaFX & SWT 5
G Frage zu JTable AWT, Swing, JavaFX & SWT 17
T Frage zu Listener für JTable AWT, Swing, JavaFX & SWT 19
T JTable Array Frage AWT, Swing, JavaFX & SWT 22
J Frage zu JTable AWT, Swing, JavaFX & SWT 7
E Frage zum Schieberegler JSlider AWT, Swing, JavaFX & SWT 5
thor_norsk Java - Allgemeine - Frage AWT, Swing, JavaFX & SWT 14
thor_norsk Allgemeine Frage AWT, Swing, JavaFX & SWT 10
M Frage zu Java Bundesligaverwaltung AWT, Swing, JavaFX & SWT 7
thor_norsk Allgemeine Frage AWT, Swing, JavaFX & SWT 9
E Frage zum Textfeld AWT, Swing, JavaFX & SWT 8
H Swing JMenu aufgeklappt oder nicht - Wie frage ich das ab? AWT, Swing, JavaFX & SWT 5
pkm Frage wegen java.lang.IllegalStateException bei DocumentListener AWT, Swing, JavaFX & SWT 4
D Frage zu ActionListenern und AvtionEvents AWT, Swing, JavaFX & SWT 2
ralfb1105 JavaFX Daten zwischen Controllern austauschen- neue Frage AWT, Swing, JavaFX & SWT 7
F JavaFX Frage zum Logging AWT, Swing, JavaFX & SWT 6
E Prinzip: wie man Ereignisse in einer GUI verarbeit. Frage zum Design? AWT, Swing, JavaFX & SWT 10
ralfb1105 Swing Frage zu SwingWorker Verhalten bei cancel() AWT, Swing, JavaFX & SWT 2
J Frage zu setuserdata AWT, Swing, JavaFX & SWT 1
N Frage zu ListView AWT, Swing, JavaFX & SWT 11
L 2D-Grafik Frage zu Ellipse2D.Double, Abfrage, ob Punkt enthalten ist funktioniert nicht AWT, Swing, JavaFX & SWT 3
T Frage zu GUI - Button soll Objekt erfassen AWT, Swing, JavaFX & SWT 2
J Event Handling Frage zu der Funktion addActionListener AWT, Swing, JavaFX & SWT 2
J Frage zur objektorentierten Swing Programmierung AWT, Swing, JavaFX & SWT 10
T JavaFX Frage zum FX-Loader AWT, Swing, JavaFX & SWT 3
B drawRect Frage und Aufgabenstellung AWT, Swing, JavaFX & SWT 10
fLooojava GridLayout - Frage bezüglich Kachelgröße AWT, Swing, JavaFX & SWT 5
S Frage zu java.awt.EventQueue AWT, Swing, JavaFX & SWT 1
J Frage zu Java Projekt [2D Game] AWT, Swing, JavaFX & SWT 3
M Swing Grundlegende Frage zu SWING mit WindowBuilder AWT, Swing, JavaFX & SWT 11
M Frage zum Loggen von Fehlern AWT, Swing, JavaFX & SWT 3
T Swing API Frage zu Verzeichnisbäumen und JTree AWT, Swing, JavaFX & SWT 1
M Thread-Frage in SWT AWT, Swing, JavaFX & SWT 1
Q Cursor Frage AWT, Swing, JavaFX & SWT 8
W JavaFX TableView frage AWT, Swing, JavaFX & SWT 5
H Taschenrechnerprojekt in Javafx - Frage zu den Buttons in FXML AWT, Swing, JavaFX & SWT 1
I Grundsätzliche Frage zu ItemListener AWT, Swing, JavaFX & SWT 11
X Kurze Frage zu JPopup AWT, Swing, JavaFX & SWT 3
D Swing [Frage] ComboBox + Label AWT, Swing, JavaFX & SWT 3
D Frage zu JFrame und Graphics AWT, Swing, JavaFX & SWT 4
kaoZ Frage zum einfügen von Componenten AWT, Swing, JavaFX & SWT 14
S GridBagLayout-Frage AWT, Swing, JavaFX & SWT 1
V 2D-Grafik Frage zum Graphics Objekt AWT, Swing, JavaFX & SWT 2
F Swing JComboBox - Frage zur Größe AWT, Swing, JavaFX & SWT 11
G noch eine Frage zum EventDispachThread AWT, Swing, JavaFX & SWT 4
D MVC Frage AWT, Swing, JavaFX & SWT 6
Z Flackern trotz Offscreen Image / Doublebuffer, (+ Frage zu Pixelvergleich) AWT, Swing, JavaFX & SWT 25
GianaSisters 2D-Grafik BufferedImage.getSubimage - Frage AWT, Swing, JavaFX & SWT 7
M Frage zu KeyListener bzgl. JApplet AWT, Swing, JavaFX & SWT 3
M Frage zu Threads AWT, Swing, JavaFX & SWT 3
N Swing JComboBox Frage AWT, Swing, JavaFX & SWT 5
Luk10 g.drawString funktioniert nicht + Frage zur Text-Rendering Qualität AWT, Swing, JavaFX & SWT 7
Luk10 Frage zu Farb-Komposition AWT, Swing, JavaFX & SWT 9
K Gui Layout Frage AWT, Swing, JavaFX & SWT 5
V SWT Import Wizard - frage zur WizardPage AWT, Swing, JavaFX & SWT 5
N Swing Frage JXMapviewer AWT, Swing, JavaFX & SWT 4
GUI-Programmer Wieder ne Layout Frage AWT, Swing, JavaFX & SWT 11
GUI-Programmer LayoutManager Kurze Layout Frage - eine komponente mittig? AWT, Swing, JavaFX & SWT 5
lumo SWT Zeichnen bescheunigen bzw eine allg. Frage AWT, Swing, JavaFX & SWT 8
H Frage zu übergebenem Vector bzw. Boolean AWT, Swing, JavaFX & SWT 3
C 2D-Grafik BufferedImage laden, Frage zum Code AWT, Swing, JavaFX & SWT 2
VfL_Freak Swing Frage zu "new JPasswordField( 10 )" AWT, Swing, JavaFX & SWT 6
H Frage zu WindowBuilder Pro AWT, Swing, JavaFX & SWT 3
C Frage/Problem mit Jpanel AWT, Swing, JavaFX & SWT 4
S Frage zu TextArea AWT, Swing, JavaFX & SWT 2
GUI-Programmer Zeichnen in Swing - Frage AWT, Swing, JavaFX & SWT 6
Luk10 Frage zu Mouseevents AWT, Swing, JavaFX & SWT 7
J Refreshing Swing Frage AWT, Swing, JavaFX & SWT 10
F Frage zu Event KeyTyped bei jPanel AWT, Swing, JavaFX & SWT 4
A Frage zu StringBuilder AWT, Swing, JavaFX & SWT 2
S allg. Frage zur GUI-Architektur AWT, Swing, JavaFX & SWT 5
A Frage zu JDialog AWT, Swing, JavaFX & SWT 3
A Frage zur Methode matches() AWT, Swing, JavaFX & SWT 2
P LayoutManager Verständnis-Frage GridBagLayout AWT, Swing, JavaFX & SWT 7
H Allgemeine Frage zu Grafikfähigkeiten von Java AWT, Swing, JavaFX & SWT 24
D Repaint Frage, Design Frage AWT, Swing, JavaFX & SWT 2
Jats Frage zu JLabel & JTextField AWT, Swing, JavaFX & SWT 4
Y frage zu BufferedImage AWT, Swing, JavaFX & SWT 7
hdi Swing Frage zu invokeAndWait() Exceptions AWT, Swing, JavaFX & SWT 8
P Swing Frage zu paintComponent/getGraphics AWT, Swing, JavaFX & SWT 4
M Frage nach Swing Element AWT, Swing, JavaFX & SWT 3
S Frage zu Graphics2D AWT, Swing, JavaFX & SWT 3
T AWT Frage zu AWT AWT, Swing, JavaFX & SWT 5
B Frage zu Swing,Threads, SwingWorker und Socket Communikation AWT, Swing, JavaFX & SWT 4
B SWT Frage zu MVC und Data-Binding AWT, Swing, JavaFX & SWT 8
T LookAndFeel Look and Feel Frage AWT, Swing, JavaFX & SWT 2
J Java2D Kreis/Kurven Frage AWT, Swing, JavaFX & SWT 2
P Kurze Frage zur Gestaltung eines vertikalen Menüs AWT, Swing, JavaFX & SWT 2
Dit_ Frage zum Thema SwingUtilities.invokeLater AWT, Swing, JavaFX & SWT 5
Eldorado Frage zur Anwendung des MVC-Konzept AWT, Swing, JavaFX & SWT 33

Ähnliche Java Themen


Oben