Neues Programm?

Status
Nicht offen für weitere Antworten.

mobile

Bekanntes Mitglied
Hallo,

ich bastel grade an einer neuen Idee für ein Programm. Ich möchte mit ihm meine Cd´s oder MD´s verwalten.
Zum Aufbau. Ich habe ein Hauptfenster, indem ich die Schaltfächen Beenden,Neuer Eintrag, MD Anzeigen und ein TextField MD Nr. habe.

Beenden ist klar.

Bei "NEuer Eintrag" möchte ich, dass sich ein neues Fenster öffnet (wie ich das mache is auch klar). In dem Fenster möchte ich die Titel und Interpreten in JTextFields eingeben.
Jetzt die erste Frage. Ich möchte, dass die Eingaben in dem Fenster unter einem Namen z.b 1 gespeichert werden.

Auf "MD Anzeigen" möchte ich nun, dass man in dem Hauptfenster in das TextField die MD eingibt die man anzeigen möchte. Bei klicken auf MD Anzeigen soll nun das Fenster mit den gespeicherten Daten geöffnet werde. Ist das machbar? Wenn ja wie könnte ich das Anstellem?

Mein erster Ansatz:

Das Fenster öffnen ist kein Problem, nur das Speichern und Anzeigen ist noch ein Problem.

Könnte ich nicht für jede Cd/MD ein neues Fenster mit den Daten speichern und dies dann aus dem Hauptfenster öffnen?
Nur wie kann ich dann die Nr der CD/MD aus dem TextField auslesen, sodass ich immer das Fenster bekomme was ich auch möchte?

Hoffe ihr habt das verstanden. :)

Vielen Dank für eure Hilfe!

MFG
timkon
 

mobile

Bekanntes Mitglied
Das ist ne gute Frage.

Hatte mir das so gedacht, dass man ein neues Fenster mit Button "Neu MD" öffnet und man dort die Daten eingibt. Diese Daten sollen dann in dem Fenster gespeichert werden. Das Fenster nennen wir jetzt mal 1. Allerdings müsste jedesmal ein neues Fenster automatisch erstellt werden.

Im Hauptfenster gebe ich dann ja im TextField 1 ein und klicke auf Anzeige. Jetzt sollen mir die Daten die ich vorher eingeben habe angezeigt werden.
 

lin

Top Contributor
Die Daten kannst du in einer Datenbank speichern und sie dann beim Anfordern wieder aus der DB rausholen...
 

mobile

Bekanntes Mitglied
Und wie mache ich das dann? Dann muss ich ja zusätzlich noch auf ne Datenbank zugreifen. Kompliziert.

Kann man das nicht so machen, dass die eingegebenen Daten gleich im Fenster gespeichert werde, so wie als wenn ich sie von Hand beim Pgrogrammieren eingeben würde?

Finde ich irgendwie besser.:)
 

lin

Top Contributor
im Fenster? Daten speichert man auf ein Speichermedium nicht auf ein Fenster :bae:
Klar, kannst sie auch in ne Datei auf der Festplatte schreiben..
wünsche recht viel Spass bei einer grossen Menge an Einträgen, beim Sortieren nach gewissen Kriterien, beim Suchen, etc..
 

mobile

Bekanntes Mitglied
ihr versteht mich nicht glaub ich.:-(

Ich erstelle ein Fenster. In dem Fenster habe ich verschiedene JTextFields.

In jedes dieser JTextField wird z.b Name und Titel geschrieben.

In ein einziges Feld trägt man eine Nr ein. Übder diese Nr. will ich das Fenster aufrufen.

Nun will ich aber, dass die Daten die ich in die Fields geschrieben habe (Name/Tiel) beim klicken auf einen Button gespeichert werden.

Wenn ich nun das Fenster öffne, sollen diese Daten wieder da sein.

Kapisch! :) Ist das so schwer? :) Oder ist das gar nicht machbar? :)
 

André Uhres

Top Contributor
timkon hat gesagt.:
...Wenn ich nun das Fenster öffne, sollen diese Daten wieder da sein...
Du darfst dein Programm dann aber nie beenden, sonst sind alle deine Fenster futsch.
Es sei denn du serialisierst sie. Aber davon würde ich abraten, weil es viel besser ist die Daten in Dateien
oder noch besser in eine DatenBank zu speichern.
 

mobile

Bekanntes Mitglied
Das bedeutet, ich muss alles in einer .txt speichern. Da ich über Acess nicht verfüge. Kann ich das nicht auch so machen, dass ich das als Tabelle speichern kann?

Also wenn ich auf Neu klicke öffnet sich ein Fenster indem eine vorgefertigte Tabelle ist. Und dann speicher ich das als .txt oder tabelle ab.

Wenn ich das Fenster wieder aufrufe öffnet sich dieses Dokument in dem Fenster. Geht das?

Kann ich nciht einfach in mein geöffnetes Fenster ein großes JTextArea machen und den darin eingebenen Text als .txt speicher? Schöner wäre natürölich in Tabelle.
 

André Uhres

Top Contributor
>Kann ich das nicht auch so machen, dass ich das als Tabelle speichern kann?
Wenn du mit Tabelle eine JTable meinst, das ist natürlich auch nur temporär haltbar. JTable ist kein permanenter Datenträger.

>...dann speicher ich das als .txt ... ab
> Wenn ich das Fenster wieder aufrufe öffnet sich dieses Dokument in dem Fenster. Geht das?
Das geht. Aber natürlich nicht automatisch.

>Kann ich nciht einfach in mein geöffnetes Fenster ein großes JTextArea machen und den darin eingebenen Text als .txt speicher?
Das geht auch. Ist einfacher.
 

mobile

Bekanntes Mitglied
Yeah, cool.
Dann mach ich das so, also mit den TextArea. Ist zwar nicht ganz so schön von der optik und überisicht aber es geht. Habe grad schon eins erstellt.

Wie kann ich das denn jetzt als .txt abspeichern? Also per klick auf "Speichern" Habe das irgendwie in meim Buch nicht verstanden. Benötigt ihr den Code dazu? dann poste ich den mal.

Code:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;


final public class CNeu extends JFrame
{
   //Behandlung für das Frame WindowLauscher
    final class CNeuFenster extends WindowAdapter
   {
       final public void windowClosing(WindowEvent e)
      {
         setVisible(false);
      }
   }
   
   //Behandlung für Button Speichern
   final class CSpeichern implements ActionListener
   {
        final public void actionPerformed(ActionEvent e)
      	{
           	
   		}
   		
	}
	
	//Behandlung den Button Schließen
   final class CSchließen implements ActionListener
   {
      final public void actionPerformed(ActionEvent e)
      {
       	setVisible(false);
      }
   }
  
      
   //Kontruktor legt Schalter und Label an
   CNeu(String titel)
   {
      super(titel);   //Fenstertitel
      
      //layout des Fensters
      getContentPane().setLayout(new BorderLayout());
            
      //Panel für Überschriften erzeugen
      JPanel oben = new JPanel();
      JLabel nr = new JLabel("MD");
      JLabel interpret = new JLabel("Interpret");
      JLabel song = new JLabel("Titel");
            
      oben.add(nr);
      oben.add(interpret);
      oben.add(song);
            
      nr.setForeground(Color.blue);
      interpret.setForeground(Color.blue);
      song.setForeground(Color.blue);
      
      //Panel für textArea erzeugen
      JPanel mitte = new JPanel();
      JTextArea text = new JTextArea();
      
      mitte.add(text);
      
      mitte.setSize(200,200);
      
      mitte.setBackground(Color.white);
                           
      //Panel für Buttons erzeugen
      JPanel button = new JPanel();
      JButton exit = new JButton ("Schließen");
      JButton save = new JButton ("Speichern");	
      
      button.add(exit);
      button.add(save);
      
      exit.setBackground(Color.white);
      save.setBackground(Color.white);
      
      //Panels zum Fenster zufügen
      getContentPane().add(oben,"North");
      getContentPane().add(mitte,"Center");
      getContentPane().add(button,"South");
      
      //Frame bei Listener anmelden
      addWindowListener(new CNeuFenster());
            
      //Listener für Buttons regisrieren
      save.addActionListener(new CSpeichern());
      exit.addActionListener(new CSchließen());
      
}
   }

Das ist jetzt der Code von dem Fenster. Denke man findet sich ganz gut zurecht oder?

Wo wir grad dabei sind. mit welchem Befehl kann ich denn die größe eines Buttons bestimmten setSize() funktionert irgendwie nicht.
 

Leroy42

Top Contributor
lin hat gesagt.:
Daten speichert man auf ein Speichermedium nicht auf ein Fenster :bae:
Erzähl das mal meiner kleinen Nichte :cool:

@timkon
Die Daten in einer Textdatei zu speichern ist einfach. Das Problem ist das wiedereinlesen.
Dazu müßtest du dir schon eine Struktur ausdenken, die leicht zu parsen ist. Anbieten würden
sich CSV(comma separated value)-Dateien in der pro Tabellenzeile eine Textzeile ist,
deren Spaltenelemente durch ein spezielles Zeichen (muß nicht Komma sein, # oder § tuns auch)
getrennt werden.

Dann wird das Einlesen relativ einfach.

Sauberer wäre allerdings eine xml-Datei. Nur ist das wieder zuviel Einarbeitung für dein Programm.
 

mobile

Bekanntes Mitglied
is ja alles Kompliziert.

Kann ich nicht eigentlich eine leere Tabelle erstellen, und diese Tabelle dann in dem Fenster in einem Panel öffnen lassen.

Dann könnte ich ja die Daten eingeben. Mir gehts da um die Übersicht. Dann könnte ich doch die Daten in der Tabelle speichern.

Beim öffnen, des Fensters wäre die gespeicherte Tabelle wieder da.

Also ich mein das so, dass man die Tabelle quasi als ein eigenständiges Dokument in dem Fenster läd und speichert. !?!

Das mit den CSV Datein habe ich irgendwie nicht verstanden. Wie soll das den Funktionieren? Aber hört sich schon ganu gut an.

Eine XML datei kann ich dann also auch in dem FEnster laden? Oder verstehe ich das falsch?
 

André Uhres

Top Contributor
>...Das ist jetzt der Code von dem Fenster. Denke man findet sich ganz gut zurecht oder?
Es ist besser wenn du die JTextArea nicht so:
getContentPane().add(mitte,"Center");
sondern so einfügst:
getContentPane().add(new JScrollPane(text),"Center");

>...mit welchem Befehl kann ich denn die größe eines Buttons bestimmten
exit.setPreferredSize(new Dimension(100,25));

>Beim öffnen, des Fensters wäre die gespeicherte Tabelle wieder da.
JTable ist kein permanenter Datenträger. Geht nicht.

>Wie kann ich das denn jetzt als .txt abspeichern?
JTextArea hat eigene write/read Methoden.
 

Leroy42

Top Contributor
Ich glaube, du hast noch grundsätzliche Verständnisschwierigkeiten.

Also Tabellen, Textfelder, ... in Programmiersprachen wie Java (C++, ...)
sind keine Excel-Tabellen die einfach gelesen und gespeichert werden können.

Das muß schon selbst programmiert werden. Es kann allerdings gut sein, daß es für
einfache JTables deren Zelleninhalte nur aus Strings bestehen schon irgendwelche
Klassen gibt, die dir das abnehmen. Aber frag mich nicht wo :(

Wenn du z.B. pro Musiktitel die Eigenschaften Titel, Interpreter, Länge, CD-Nr hast
sieht eine CSV-Datei so aus:

Titel 1§Interpret 1§3:12§17
Titel 22§Interpret 234§4:22§171
...


Pro Zeile steht ein Titel. Die Eigenschaften sind, in diesem Beispiel, durch § voneinander
getrennt. Einlesen und Speichern geht dann zwar einfach, es muß aber geproggt werden.

Eine entsprechende xml-Datei sieht so au

Code:
<musikListe>
  <musik>
    <titel>Titel 1</titel>
    <interpret>Interpret 1</interpret>
    ...
  </musik>
  ...
</musikListe>
Aber auch die muß per Programm geschrieben und gelesen werden. Hierfür gibt es zwar
fertige xml-Parser, aber ich schätze für deine Aufgabenstellung ist dies zu umfangreich.
 

mobile

Bekanntes Mitglied
Gut dann speicher ich das als text und lasse die dann immer wieder aufrufen. Weiß zwar noch nciht wie aber ihr seit ja da :)!

Aber mal was anderes. Es ist doch möglich verschiedene Fenster aufzurufen oder? Also wenn ich in mein TextField im Hauptfenster "1" schreibe, möchte ich ja Fenster 1 anzeigen. Wenn ich jetzt aber, 2 eingeben möchte ich 2 anzeigen. Das bedeutet ich kann doch mit einer switch Anweisung sagen, was das Programm tun soll, wenn in dem TextField 1,2,3,... steht oder?

Nur wie kann ich nochmal die Zahl aus dem Feld auslesen und weitergeben, sodass der Button "Anzeigen" dann auch die 1,2.. erhält und dem entsprechend das richtige Fenster aufruft?

Danke!

Ja das mit dem Verständnis mag wohl sein! Bin eben ein NewBie :)! Aller Anfang ist schwer, aber man wächst mit der herausforderung! :) Schlauer Spruch was? :)
 

André Uhres

Top Contributor
>Gut dann speicher ich das als text und lasse die dann immer wieder aufrufen. Weiß zwar noch nciht wie...
JTextArea hat eigene write/read Methoden.

>Es ist doch möglich verschiedene Fenster aufzurufen oder?
Ja.

>Also wenn ich in mein TextField im Hauptfenster "1" schreibe, möchte ich ja Fenster 1 anzeigen. Wenn ich jetzt
>aber, 2 eingeben möchte ich 2 anzeigen. Das bedeutet ich kann doch mit einer switch Anweisung sagen, was das
>Programm tun soll, wenn in dem TextField 1,2,3,... steht oder?
Ja.

>Nur wie kann ich nochmal die Zahl aus dem Feld auslesen
String wert = textfeld.getText();
int intWert = Integer.parseInt(wert);

>und weitergeben, sodass der Button "Anzeigen" dann auch die 1,2.. erhält und dem entsprechend das richtige
>Fenster aufruft?
Kann man mit Cardlayout machen.
 

mobile

Bekanntes Mitglied
Was ist den CardLayout? Noch nie gehört.

Ich muss jetzt leider weg.

Danke für eure Tipss, das mit dem TextArea anders zufügen ist ja geil :).

Ok, hoffe ihr könnt mir weiterhin helfen,w enn ich morgen weiter mache. Also bis denne!
 

Ilja

Bekanntes Mitglied
Warum zum Geier wird hier versucht das Rad neu zu erfinden? o_O

es gibt 1000 solcher Tools!

wenn ne übung sein soll, ok - anderenfalls OMG!
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
G JavaFX Code in neues Projekt übernehmen AWT, Swing, JavaFX & SWT 0
W Clear Canvas und anschließendes neues Erstellen von Objekten auf Canvas aus ArrayList AWT, Swing, JavaFX & SWT 4
W Zweites/neues Fenster durch Button öffnen AWT, Swing, JavaFX & SWT 6
B JavaFX TextField Eingabe in neues Fenster übernehmen AWT, Swing, JavaFX & SWT 4
O Kann kei neues Panel zum zeichnen aufrufen... AWT, Swing, JavaFX & SWT 4
J Overlay Panel statt neues Fenster AWT, Swing, JavaFX & SWT 6
X Neues Fenster mit Button öffnen und bearbeiten AWT, Swing, JavaFX & SWT 4
M Swing Durch Usereingabe neues Objekt AWT, Swing, JavaFX & SWT 2
D Swing Neues (3.) Fenster öffnen AWT, Swing, JavaFX & SWT 2
S Mit JButton neues Fester öffnen und das alte schließen AWT, Swing, JavaFX & SWT 3
S SWT neues Fenster, buttons aus alten etc... AWT, Swing, JavaFX & SWT 0
J Panel auf Frame löschen und neues Panel Hinzufügen AWT, Swing, JavaFX & SWT 4
G Event Handling TableView daten in ein neues Fenster herauslesen? AWT, Swing, JavaFX & SWT 3
C Benutzername in GUI eingeben und nach Spiel neues Fenster Benutzername wieder anzeigen AWT, Swing, JavaFX & SWT 1
C Durch klicken von Button neues Fenster oeffnen AWT, Swing, JavaFX & SWT 18
B JavaFX ImageView neues Bild zuweisen AWT, Swing, JavaFX & SWT 19
I Neues JFrame wird nicht richtig angezeigt AWT, Swing, JavaFX & SWT 5
S JavaFX Teil eines Bildes ausschneiden / als neues Bild nutzen AWT, Swing, JavaFX & SWT 8
D Mit Klick auf Button ein neues Fenster erzeugen AWT, Swing, JavaFX & SWT 11
D Neues Dialog Mittig auf dem Bildschirm AWT, Swing, JavaFX & SWT 4
I JTable: Doppelklick auf Table soll neues Fenster öffnen und Daten aus JTable anzeigen AWT, Swing, JavaFX & SWT 4
K Java Button öffnet neues Fenster AWT, Swing, JavaFX & SWT 5
D Swing Bei Button Click neues Panel laden AWT, Swing, JavaFX & SWT 3
X Swing Ein neues Fenster öffen aber ohne ein extra Prozess zu starten AWT, Swing, JavaFX & SWT 1
J JTable Zeile anklicken und neues Frame öffnen AWT, Swing, JavaFX & SWT 4
G JavaFX Neues Fenster erstellen AWT, Swing, JavaFX & SWT 3
A Swing GUI mit ComboBox, wenn Item ausgewählt wurde neues GUI AWT, Swing, JavaFX & SWT 7
W Neues TableModel und JTable wird nicht refreshed AWT, Swing, JavaFX & SWT 3
Wirago Swing neues Fenster nicht sichtbar AWT, Swing, JavaFX & SWT 6
D Neues Frame öffnen - und dazu altes schließen AWT, Swing, JavaFX & SWT 5
A JComboBox-Inhalt durch neues Array ersetzen AWT, Swing, JavaFX & SWT 2
GianaSisters AWT Per Button neues Element auf den jPanel setzen AWT, Swing, JavaFX & SWT 6
J Mit Button neues Fenster öffnen AWT, Swing, JavaFX & SWT 17
B Warten bis neues ImageIcon zugewiesen ist AWT, Swing, JavaFX & SWT 3
J jme neues projekt öffnen AWT, Swing, JavaFX & SWT 4
T neues Fenster durch Button öffnen funktioniert nicht!! AWT, Swing, JavaFX & SWT 2
H Applet JApplet soll neues Tab im Browser öffnen AWT, Swing, JavaFX & SWT 2
X Swing Neues Fenster erzeugen AWT, Swing, JavaFX & SWT 3
M Swing jcombobox als jtable-editor: neues Item auswählen AWT, Swing, JavaFX & SWT 4
O Button (ActionPerformed) soll neues JFrame erzeugen AWT, Swing, JavaFX & SWT 8
Dit_ Mit Button "Weiter" neues Panel laden, altes ausblenden... AWT, Swing, JavaFX & SWT 4
H Swing [gelöst]Neues Swing Element erstellen AWT, Swing, JavaFX & SWT 4
H Swing neues fenster AWT, Swing, JavaFX & SWT 2
D Neues Java Fenster öffnen AWT, Swing, JavaFX & SWT 2
G JList und ein neues Element oben in der Liste einfügen AWT, Swing, JavaFX & SWT 4
N Durch Button drücken neues Fenster öffnen AWT, Swing, JavaFX & SWT 13
I Applet --> neues Fenster öffnen AWT, Swing, JavaFX & SWT 11
N Threads kein neues Fenster erzeugen lassen AWT, Swing, JavaFX & SWT 4
F neues Fenster öffnen AWT, Swing, JavaFX & SWT 2
N in jScrollPane, neues Swing Element hinzufügen AWT, Swing, JavaFX & SWT 6
T Jbutton geklickt, dann neues Fenster AWT, Swing, JavaFX & SWT 4
S Neues Panel in JFrame anzeigen durch Button klick AWT, Swing, JavaFX & SWT 2
M Will ein neues Fenster AWT, Swing, JavaFX & SWT 13
D Neues JPanel ohne Symbolleisteneintrag AWT, Swing, JavaFX & SWT 6
G JButton benutzen um ein neues JFrame zu erstellen AWT, Swing, JavaFX & SWT 3
J Problem: neues Fenster bei dispose öffnen AWT, Swing, JavaFX & SWT 8
M neues Frame per klick anzeigen AWT, Swing, JavaFX & SWT 9
G Neues Frame über Button öffnen lassen AWT, Swing, JavaFX & SWT 15
S MVC - Neues Frame, neue View, neuer Controller? AWT, Swing, JavaFX & SWT 3
hamburger_jung Mit Button Klick neues Fenster öffnen. AWT, Swing, JavaFX & SWT 1
G Neues Model für JTextField erstellen AWT, Swing, JavaFX & SWT 8
M fortführung neues Bild laden AWT, Swing, JavaFX & SWT 12
M neues Bild laden AWT, Swing, JavaFX & SWT 15
V JOptionPane neues outfit mit BasicOptionPaneUI? AWT, Swing, JavaFX & SWT 22
J JList - doppelklick auf item -> neues fenster öffnet sich AWT, Swing, JavaFX & SWT 2
M Neues Fenster öffnen AWT, Swing, JavaFX & SWT 2
D in neues Image-Objekt zeichnen AWT, Swing, JavaFX & SWT 3
G JTree. Neues Element hinzufügen und Selection beibehalten! AWT, Swing, JavaFX & SWT 3
M Tooltip / neues Fenster AWT, Swing, JavaFX & SWT 6
J Neues Problem AWT, Swing, JavaFX & SWT 9
Juelin starten maven javafx programm ohne netbeans AWT, Swing, JavaFX & SWT 38
P AWT Programm funktioniert nicht richtig AWT, Swing, JavaFX & SWT 35
G CAD Programm AWT, Swing, JavaFX & SWT 4
thor_norsk E - Mail Programm AWT, Swing, JavaFX & SWT 2
_user_q Über installDist exportiertes Programm wirft "Unsupported JavaFX configuration" AWT, Swing, JavaFX & SWT 0
CodingBerlin JavaFX Programm läuft nur unter Eclipse AWT, Swing, JavaFX & SWT 1
J Programm findet Resource nicht. AWT, Swing, JavaFX & SWT 6
N Programm Läuft nicht auf anderen Pcs AWT, Swing, JavaFX & SWT 9
imawake Java Paket-Tracking Programm 📦 AWT, Swing, JavaFX & SWT 7
S Lustiges programm schnell coden? AWT, Swing, JavaFX & SWT 2
O Ein Java-Programm mit Swing steuern AWT, Swing, JavaFX & SWT 1
P Swing Programm hängt sich bei Buttondruck auf? (GUI für "Chatbot" erstellen) AWT, Swing, JavaFX & SWT 15
M DragAndDrop - aus Browser ins Programm AWT, Swing, JavaFX & SWT 6
T Java GUI - Würfel Programm AWT, Swing, JavaFX & SWT 6
JojoSand Java Programm wird nicht gestartet - keinen Fehlerhinweis AWT, Swing, JavaFX & SWT 9
SvenPittelkow Programm soll auf JButton warten bis der geklickt wurde AWT, Swing, JavaFX & SWT 1
I Gui in bestehendes Java-Programm AWT, Swing, JavaFX & SWT 11
L JavaFX IntelliJ Standalone Programm exportieren AWT, Swing, JavaFX & SWT 9
Bluedaishi JavaFX Programm start mit zwei scenen bzw Fenster AWT, Swing, JavaFX & SWT 1
M AWT Programm in den Tray minimieren AWT, Swing, JavaFX & SWT 2
steven789hjk543 Swing Weiß jemand, warum dieses Programm nicht funktioniert? AWT, Swing, JavaFX & SWT 7
A Java Programm gestalten AWT, Swing, JavaFX & SWT 4
P Swing Warum startet das Programm nicht? AWT, Swing, JavaFX & SWT 3
J JavaFX Kamera im Programm öffnen AWT, Swing, JavaFX & SWT 6
H Hintergrundbild in einem Programm AWT, Swing, JavaFX & SWT 4
MR._FIRE_Flower progressBar in ein bestehendes Programm einbauen AWT, Swing, JavaFX & SWT 3
J Verbesserungsvorschläge?! Kleines AWT Programm AWT, Swing, JavaFX & SWT 4
A Programm nun in ein Frame basteln AWT, Swing, JavaFX & SWT 1
A Swing Programm funktioniert aber zwei Buttons werden angezeigt AWT, Swing, JavaFX & SWT 3
G Zeichnen Programm AWT, Swing, JavaFX & SWT 1

Ähnliche Java Themen

Neue Themen


Oben