Ich möchte mir eine gemeinsame Oberklasse für alle Elemente eines GUI in Java schreiben.
Diese Klasse soll dazu genutzt werden, um Dinge wie GUIFrame, GUIButton, GUILabel, GUIPanel etc. zu erstellen.
Ich möchte die J-Objekte wie JFrame, JButton, etc explizit nicht nutzen. Ich habe mir eine Klasse GUIFrame erstellt, weiß jetzt jedoch nicht, wie ich das weiter verarbeiten muss.
Außerdem habe ich eine Klasse GUIButton.
Ich möchte wissen, wie ich die Klasse GUIframe verändern muss, um GuiButton hinzufügen kann und das Fenster sichtbar machen zu können
Java:
package javaext.gui;
import java.awt.*;
import javax.swing.*;
import javax.swing.*;
public class GuiElement extends JComponent {
// Gemeinsame Attribute für GUI-Elemente
protected String text;
protected int x;
protected int y;
protected int width;
protected int height;
// Konstruktor
public GuiElement() {
setPreferredSize(new Dimension(100, 100));
}
public GuiElement(String text){
this.text = text;
}
// Methode zum Setzen des Textes
public void setText(String text) {
this.text = text;
repaint();
}
// Methode zum Zeichnen des GUI-Elements (Standardimplementierung)
protected void draw(Graphics g) {
// Hier könnte die Standardzeichnung erfolgen, z.B. Hintergrundfarbe setzen
}
// Methode zum Behandeln von Ereignissen (Standardimplementierung)
protected void handleEvent() {
// Hier könnte die Standardereignisbehandlung erfolgen
}
// Überschreibbare Methode zum Zeichnen des GUI-Elements
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
draw(g);
}
// Überschreibbare Methode zur Behandlung von Ereignissen
protected void processEvent() {
handleEvent();
}
public void setBounds(int x, int y, int width, int height){
this.x = x;
this.y = y;
this.width = width;
this.height = height;
repaint();
}
}
Diese Klasse soll dazu genutzt werden, um Dinge wie GUIFrame, GUIButton, GUILabel, GUIPanel etc. zu erstellen.
Ich möchte die J-Objekte wie JFrame, JButton, etc explizit nicht nutzen. Ich habe mir eine Klasse GUIFrame erstellt, weiß jetzt jedoch nicht, wie ich das weiter verarbeiten muss.
Java:
package javaext.gui;
import java.awt.event.*;
import javax.swing.*;
import java.awt.*;
public class GUIFrame extends GuiElement {
private boolean resizable;
private boolean closable;
private boolean minimizable;
public GUIFrame(String title, boolean resizable, boolean closable, boolean minimizable) {
super(title);
this.resizable = resizable;
this.closable = closable;
this.minimizable = minimizable;
setupFrame();
}
private void setupFrame() {
setDefaultCloseOperation();
addWindowListener();
setResizable();
setUndecorated();
pack();
setVisible(true);
}
private void setDefaultCloseOperation() {
if (closable) {
addComponentListener(new ComponentAdapter() {
public void componentHidden(ComponentEvent e) {
onClose();
}
});
} else {
setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
}
}
private void addWindowListener() {
if (minimizable) {
addWindowStateListener(new WindowAdapter() {
@Override
public void windowStateChanged(WindowEvent e) {
if (e.getNewState() == Frame.ICONIFIED) {
onMinimize();
}
}
});
}
}
private void setResizable() {
setPreferredSize(new Dimension(400, 300));
setResizable(resizable);
}
private void setUndecorated() {
if (!closable) {
setUndecorated(true);
}
}
private void onClose() {
dispose();
System.exit(0);
}
private void onMinimize() {
setState(Frame.ICONIFIED);
}
@Override
protected void draw(Graphics g) {
super.draw(g);
g.setColor(Color.WHITE);
g.fillRect(0, 0, getWidth(), getHeight());
g.setColor(Color.BLACK);
g.drawRect(0, 0, getWidth() - 1, getHeight() - 1);
if (text != null) {
FontMetrics fm = g.getFontMetrics();
int textWidth = fm.stringWidth(text);
int x = (getWidth() - textWidth) / 2;
int y = fm.getHeight();
g.drawString(text, x, y);
}
}
@Override
protected void handleEvent() {
super.handleEvent();
}
public static void main(String[] args) {
GUIFrame frame = new GUIFrame("Resizable, Closable, Minimizable Frame", true, true, true);
}
}
Java:
package javaext.gui;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class GuiButton extends GuiElement {
// Konstruktor
public GuiButton(String text) {
super(text);
// Füge einen ActionListener hinzu, um auf Klicks zu reagieren
addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// Hier kannst du die Aktion für den Button definieren
System.out.println("Button geklickt");
}
});
}
// Überschreibe die draw-Methode für die spezifische Darstellung des Buttons
@Override
protected void draw(Graphics g) {
super.draw(g);
g.setColor(Color.BLUE);
g.fillRect(0, 0, width, height);
g.setColor(Color.WHITE);
g.drawString(text, 10, 20);
}
}