Eigenes Fenster erstellen

PissPain

Aktives Mitglied
Gibt es eine Möglichkeit, eine art Fenster zu erstellen, ohne auf Klassen wie JFrame, Frame usw. zugreifen zu müssen?

Also seine eigenen Graphics usw. machen zu können?
Natürlich sollten dann auch irgendwie Mouse / Key -events möglich sein...

Habe so nicht wirklich was dazu finden können, also hoffe ich mal, dass ihr mich informieren könnt :)

Vielen Dank.
 

stg

Top Contributor
Klar, du kannst auch von
Code:
Object
erben und alles selbst machen :autsch:
 

PissPain

Aktives Mitglied
Wenn schon so gefragt wird, wird meistens erwartet, dass einem erklärt wird, wie?
Oder nicht?? :D

Auf jeden Fall reicht mir die Antwort nicht :S

Vielen Dank.
 

Tobse

Top Contributor
Um Fenster auf dem Bildschirm anzuzeigen müssen diese beim Betriebssystem angemeldet werden. Das geht nur über nativen Code; sprich um JNI wirst du nicht herumkommen wenn du das ernsthaft machen willst.

Eine andere möglichkeit (ab Java 7) wäre, von JFrame zu erben und die Fensterdekoration auszuschalten. Damit bekommst du quasi vom Betriebsystem eine Fläche auf dem Bildschirm in die du zeichnen kannst, was immer du willst. Wie du dann dein Framework bzgl. Fenstersteuerung, Buttons, Eingabe, Events, Layouts und so weiter machst ist dann dier überlassen (du musst es halt dann mit paint(Graphics) auf den Bildschrim bringen.

Aber lass dir eins gesagt sein: Das ist mehr als eine Mammut Aufgabe. Einer alleine Schafft das nie. Und auch wenn ihr zu 10. Seid wird es mit Full-Time Arbeit mindestens ein halbes Jahr dauern bis sich etwas erstes zeigen lassen kann. Ich weiss nicht wieviele Entwickler bei Oracle/Sun für Swing verantwortlich sind. Aber dass die Zahl dreistellig ist halte nicht für übertrieben.
 

DrZoidberg

Top Contributor
Du könntest dir eine stark vereinfachte Form von Swing/awt selber basteln.
Hier ist mal ein Beispiel.
Da fehlt natürlich noch eine brauchbare Grafik und die Möglichkeit Fenster zu verschieben etc. aber ich denke es demonstriert das Prinzip.

Java:
import java.awt.event.MouseAdapter;
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.Dimension;
import java.awt.Color;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.util.ArrayList;

class MouseEvent {
  private Point position;
  private String type;
  
  Point getPosition() { return position; }
  String getType() { return type; }
  MouseEvent(Point position, String type) {
    this.position = position;
    this.type = type;
  }
}

abstract class Component {
  private Rectangle bounds;
  Component(Rectangle bounds) {
    this.bounds = bounds;
  }
  int getWidth() {
    return bounds.width;
  }
  int getHeight() {
    return bounds.height;
  }
  Rectangle getBounds() {
    return bounds;
  }
  abstract void mouseEvent(MouseEvent e);
  abstract void paint(Graphics2D g);
}

class Container extends Component {
  private ArrayList<Component> components = new ArrayList<>();
  
  Container(Rectangle bounds) {
    super(bounds);
  }
  void add(Component comp) {
    components.add(comp);
  }
  void mouseEvent(MouseEvent e) {
    for(Component cp: components) {
      if(cp.getBounds().contains(e.getPosition())) {
        MouseEvent e2 =
          new MouseEvent(new Point(e.getPosition().x - cp.getBounds().x,
                                   e.getPosition().y - cp.getBounds().y),
                         e.getType());
        cp.mouseEvent(e2);
      }
    }
  }
  void paint(Graphics2D g) {
    for(Component cp: components) {
      Rectangle bounds = cp.getBounds();
      Graphics2D g2 = (Graphics2D)g.create(bounds.x, bounds.y,
                                           bounds.width, bounds.height);
      cp.paint(g2);
      g2.dispose();
    }
  }
}

class Window extends Container {
  Window(Rectangle bounds) {
    super(bounds);
  }
  @Override
  void paint(Graphics2D g) {
    g.setColor(Color.BLUE);
    g.fillRect(0, 0, getWidth(), getHeight());
    super.paint(g);
  }
}

class Button extends Component {
  private String name;
  Button(String name, Rectangle bounds) {
    super(bounds);
    this.name = name;
  }
  void mouseEvent(MouseEvent e) {
    System.out.println("button \"" + name + "\" mouse " + e.getType());
  }
  void paint(Graphics2D g) {
    g.setColor(Color.RED);
    g.fillRect(0, 0, getWidth(), getHeight());
    g.setColor(Color.BLACK);
    g.drawString(name, 10, 20);
  }
}

public class GUI extends JPanel {
  static Component comp;
  
  public static void main(String[] args) {
    Window window = new Window(new Rectangle(100, 100, 800, 600));
    window.add(new Button("Click me", new Rectangle(200, 200, 100, 50)));
    Container container = new Container(new Rectangle(0, 0 , 1024, 768));
    container.add(window);
    comp = container;
    
    JFrame frame = new JFrame();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    GUI gui = new GUI();
    gui.setPreferredSize(new Dimension(1024, 768));
    gui.addMouseListener(new MouseAdapter() {
      public void mouseClicked(java.awt.event.MouseEvent e) {
        comp.mouseEvent(new MouseEvent(e.getPoint(), "clicked"));
      }
    });
    frame.add(gui);
    frame.pack();
    frame.setVisible(true);
  }
  
  public void paint(Graphics g) {
    Graphics2D g2 = (Graphics2D)g;
    comp.paint(g2);
  }
}

Ich würde dir auch empfehlen im Java gaming Forum nachzufragen.
Java-Gaming.org
Spiele enthalten häufig Menüs und andere GUI Elemente, die die Leute meistens selbst schreiben ohne Swing oder ähnliches zu verwenden.
 
Zuletzt bearbeitet:

PissPain

Aktives Mitglied
Ok, vielen Dank erstmal.
Eigentlich bin ich schon die ganze Zeit so am Arbeiten.
Ich erstelle mir z.b. eigene Buttons durch MouseListener, mache meine eigenen Components und mein Fenster erbt auch von awt.Frame...

Und ich finde es immer ein bischen langweilig, von awt usw. abhängig zu sein, deshalb wollte ich mal wissen, ob es eine Möglichkeit gibt das fast selber machen zu können, aber ich hatte mir das so nicht vorgestellt.

Deshalb belasse ich das erstmal so, wie ich es habe.

Vielen Dank :)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
G Eigenes Fenster Java Basics - Anfänger-Themen 51
S Mein erstes eigenes Projekt - Aufbau und Strukturierung Java Basics - Anfänger-Themen 6
R Eigenes Protokoll zur Übermittlung von Daten zum Webserver? Java Basics - Anfänger-Themen 4
8 Eigenes Bild in email einfügen Java Basics - Anfänger-Themen 1
G eigenes package Java Basics - Anfänger-Themen 3
Anfänger2011 Eigenes Betriebssystem Java Basics - Anfänger-Themen 6
F eigenes Listener Pattern mit Interface Java Basics - Anfänger-Themen 1
P eigenes Equal mit IndexOf() Java Basics - Anfänger-Themen 5
L eigenes Steuerelement Zeitstrahl Java Basics - Anfänger-Themen 3
F Eigenes Package - Variable exportieren Java Basics - Anfänger-Themen 11
GianaSisters Methoden eigenes TableModel -> removeRow möglich machen Java Basics - Anfänger-Themen 30
D Eigenes Event beim TimeOut Java Basics - Anfänger-Themen 2
C Eigenes Konsolenfenster Java Basics - Anfänger-Themen 3
D Packages verwenden und in eigenes Projekt integrieren Java Basics - Anfänger-Themen 3
B Eigenes Package Java Basics - Anfänger-Themen 6
S Eigenes Objekt temporär verändern? (Clone)? Java Basics - Anfänger-Themen 12
M Eigenes Programm Flaechenrechner Java Basics - Anfänger-Themen 8
L Eigenes List Model für Icon + String -> Speicherhungrig? Java Basics - Anfänger-Themen 8
X Eigenes Kontosystem vervollständigen Java Basics - Anfänger-Themen 11
Developer_X eigenes ImageIcon schreiben Java Basics - Anfänger-Themen 11
Q Eigenes Event feuern Java Basics - Anfänger-Themen 5
S Eigenes Kontextmenü Java Basics - Anfänger-Themen 3
I jar in eigenes Programm unwandeln (OSX und Win) Java Basics - Anfänger-Themen 4
R Eigenes Pair Object Java Basics - Anfänger-Themen 2
C eigenes TableModel Java Basics - Anfänger-Themen 2
data89 In Java ein eigenes Lexikon erstellen? Doch wie? Java Basics - Anfänger-Themen 5
GilbertGrape Eigenes Event? Java Basics - Anfänger-Themen 2
K javadoc eigenes doclet in console starten Java Basics - Anfänger-Themen 3
B Eigenes Event schreiben Java Basics - Anfänger-Themen 7
M Eigenes Ellipse2D-Objekt Java Basics - Anfänger-Themen 5
N Eigenes Icon in InputDialog geht nicht! Java Basics - Anfänger-Themen 7
J Eigenes Symbol für Java Programm Java Basics - Anfänger-Themen 3
M Eigenes Seitenformat definieren Java Basics - Anfänger-Themen 2
Q Eigenes TableModel - NullPointerException Java Basics - Anfänger-Themen 6
F eigenes Package Java Basics - Anfänger-Themen 2
B Package/Klasse in ein eigenes Projekt einbinden? aber wie? Java Basics - Anfänger-Themen 6
E Variable von 1. Fenster an 2. Fenster übergeben. Java Basics - Anfänger-Themen 7
javalux123 Keylistener auf andere Fenster Java Basics - Anfänger-Themen 3
T Java FXML selbes Fenster verschiedene Stellen im Programm Java Basics - Anfänger-Themen 5
B Scrollbares Fenster (JScrollPane) mit JPanel scrollt nicht Java Basics - Anfänger-Themen 3
J Überprüfen ob ein Fenster offen ist? Java Basics - Anfänger-Themen 8
T jOptionPane zum schließen von Fenster, wie "Ja" und "Nein" anstatt Yes und No Java Basics - Anfänger-Themen 2
JEP1 Java Dialog Fenster schließen Spiel Java Basics - Anfänger-Themen 0
H Eingabe tätigen bevor Graphics g Fenster öffnet Java Basics - Anfänger-Themen 5
celta_vigo Konsolen-Fenster ist weg Java Basics - Anfänger-Themen 5
Thomathy Interface Wie schließt man ein anderes JFrame Fenster? Java Basics - Anfänger-Themen 6
M PNG als Spieler im Fenster anzeigen Java Basics - Anfänger-Themen 4
S JOptionPane komplett leeres Fenster Java Basics - Anfänger-Themen 4
A Eclipse-Fenster starten statt Konsoleausgabe Java Basics - Anfänger-Themen 2
A Fenster bleibt weiß Java Basics - Anfänger-Themen 7
O Fenster programmieren Java Basics - Anfänger-Themen 2
M JavaFX: Fenster bleibt weiß Java Basics - Anfänger-Themen 3
A Fenster programmieren Java Basics - Anfänger-Themen 1
J JFrame Fenster öffnet sich nicht Java Basics - Anfänger-Themen 7
M aus Fenster anderes Fenster öffnen und wieder umgekehrt Java Basics - Anfänger-Themen 5
J Best Practice DOS Fenster mit Befehlszeile (Lösung) Java Basics - Anfänger-Themen 2
J Fenster wieder unsichtbar machen Java Basics - Anfänger-Themen 2
das_leon Gesamtes Programm in einem Fenster Java Basics - Anfänger-Themen 1
E Knopfdruck neues Fenster öffnen Java Basics - Anfänger-Themen 5
A Fenster mit Button aufrufen Java Basics - Anfänger-Themen 3
D Erste Schritte JPanel verschiebt Fenster via setVisible Java Basics - Anfänger-Themen 5
W Es wird erst gezeichnet, wenn ich das Fenster vergrößere? Java Basics - Anfänger-Themen 20
K Interface Fenster mit 3 ComboBoxen und 1 Button Java Basics - Anfänger-Themen 13
P Erste Schritte durch MenuBar verschiedene Fenster öffnen Java Basics - Anfänger-Themen 2
I Fenster A soll Fenster B schliessen Java Basics - Anfänger-Themen 5
D Java Fenster blockiert ? Java Basics - Anfänger-Themen 5
K Erste Schritte Neues Fenster mit Textinhalt öffnen Java Basics - Anfänger-Themen 6
M Code um per jButton ein neues Fenster zu öffnen Java Basics - Anfänger-Themen 3
A Popup-Fenster Java Basics - Anfänger-Themen 1
L Fenster auf Knopfdruck Java Basics - Anfänger-Themen 3
N Problem mit JOptionPane und Fenster-Fokus Java Basics - Anfänger-Themen 2
J ausgaben von der konsole in das fenster Java Basics - Anfänger-Themen 5
O Finally beim Fenster schliessen Java Basics - Anfänger-Themen 3
F Klassen Zugriff auf Fenster aus versch. Klassen Java Basics - Anfänger-Themen 5
M Input/Output Text auf Fenster zeichen Java Basics - Anfänger-Themen 2
T Zu viele Fenster - HILFE! Java Basics - Anfänger-Themen 5
J Extra Fenster (Frame) Java Basics - Anfänger-Themen 20
llabusch Fenster per Button verschieben Java Basics - Anfänger-Themen 5
llabusch Fenster um x Pixel verschieben Java Basics - Anfänger-Themen 4
P Window Builder Reiter im Fenster erstellen Java Basics - Anfänger-Themen 7
S Java Fenster Java Basics - Anfänger-Themen 2
D (zwei) Fenster mit unterschiedlicher Befüllung Java Basics - Anfänger-Themen 11
A JAVA Fenster in ein PDF Konvertieren Java Basics - Anfänger-Themen 1
A Erkennung eines Button im aktiven Fenster Java Basics - Anfänger-Themen 2
B Variable im Fenster anzeigen lassen? Java Basics - Anfänger-Themen 2
S Fenster ist zu groß Java Basics - Anfänger-Themen 8
O GUI: Eigene Fenster "Form"? Java Basics - Anfänger-Themen 13
X JFrame Fenster einzeln schließen Java Basics - Anfänger-Themen 2
E Fehlermeldung und Fenster wird nicht mehr angezeigt Java Basics - Anfänger-Themen 12
I Einlese Abfrage zweier Variablen in einem Fenster Java Basics - Anfänger-Themen 6
F Erste Schritte Aktuelles Fenster durch Event schließen Java Basics - Anfänger-Themen 3
N Java Programm im CMD Fenster öffnen, wie? Java Basics - Anfänger-Themen 17
S Erste Schritte Fenster wechsel im Applet Java Basics - Anfänger-Themen 7
tuttle64 Keine Umlaute im Dos Fenster Java Basics - Anfänger-Themen 12
J Button nimmt das komplette Fenster ein?! Java Basics - Anfänger-Themen 5
M Beim Klicken auf X neues Fenster Java Basics - Anfänger-Themen 4
Athena Schlichtes Fenster mit Windowskomponenten Java Basics - Anfänger-Themen 3
H KeyListener auf ganzes Fenster setzen Java Basics - Anfänger-Themen 14
S Neues Fenster auf Knopfdruck Java Basics - Anfänger-Themen 12
J Button drücken neues Fenster?! Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben