AWT SWING Aufgabe

thor_norsk

Bekanntes Mitglied
Guten Abend,
ich habe eine Aufgabe erhalten und habe versucht Alles nach Vorgaben zu programmieren, aber die Verschiebung nach oben und unten funktioniert nicht.
Vielen Dank für eure Hilfe im Voraus.

Aufgabe)
Erstellen Sie eine Anwendung, in der Sie die Position des Fensters der Anwendung über vier Schaltflächen verändern können.
Eine Schaltfläche soll das Fenster um 10 Pixel nach oben verschieben, eine um 10 Pixel nach unten und die beiden anderen um je 10 Pixel nach links bzw. nach rechts.
Beachten Sie bei der Umsetzung bitte folgenden Vorgaben:
- Erstellen Sie für den Listener eine innere Klasse in der Klasse mit dem Fenster der Anwendung. Der Listener soll die Ereignisse alle vier Schaltflächen verarbeiten können.
- Setzen Sie das Fenster der Anwendung fest auf die Größe 300x300 und positionieren Sie es zunächst einer beliebigen Stelle auf dem Desktop.
- Ordnen Sie die Schaltflächen in einem BorderLayout mit einem Abstand von 25 Pixeln an.
- Stellen Sie sicher, dass das Fenster nicht aus dem Desktop herausgeschoben werden kann. Ermitteln Sie dazu die aktuelle Größe des Desktops und berechnen Sie dann die maximal möglichen Koordinaten für die Verschiebung nach rechts und nach unten. Für die Verschiebung nach links beziehungsweise oben können Sie den Wert 0 als Grenze verwenden.

Mein Code:

Java:
package gui2;

import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.BorderFactory;


public class Schaltflaechen extends JFrame {
    
    //die ID wurde automatisch mit Eclipse ergänzt
    private static final long serialVersionUID = 9101793356610287755L;   

    private JButton schaltflaeche1, schaltflaeche2, schaltflaeche3, schaltflaeche4, schaltflaeche5;
    //für die aktuelle Schriftgröße
    private int schriftGroesse;
    
    //Instanzvariablen für horizontale & vertikale Verschiebung
    private int x,y;
        
    //die innere Klasse für den ActionListener
    class SchaltflaechenListener implements ActionListener {
        
        @Override
        public void actionPerformed(ActionEvent e) {
        
            //würde auf NORTH geklickt
            if (e.getActionCommand().equals("NORTH"))
                // 10 Pixeln nach NORTH
                setLocation(x, y+10);
            //würde auf EAST geklickt
            if (e.getActionCommand().equals("EAST"))
                // 10 Pixeln nach Unten
                setLocation(x+10, y);
            //würde auf CENTER geklickt
            if (e.getActionCommand().equals("CENTER"))
                // 10 Pixeln nach CENTER!
                setLocation(x-0,y-0);
            //würde auf SOUTH geklickt
            if (e.getActionCommand().equals("SOUTH"))
                // 10 Pixeln nach SOUTH!
                setLocation(x, y-10);
            //würde auf WEST geklickt
            if (e.getActionCommand().equals("WEST"))
                // 10 Pixeln nach WEST!
                setLocation(x-10, y);
        
                schaltflaeche1.setFont(new Font("Arial", Font.PLAIN, schriftGroesse));
                schaltflaeche2.setFont(new Font("Arial", Font.PLAIN, schriftGroesse));
                schaltflaeche3.setFont(new Font("Arial", Font.PLAIN, schriftGroesse));
                schaltflaeche4.setFont(new Font("Arial", Font.PLAIN, schriftGroesse));
                schaltflaeche5.setFont(new Font("Arial", Font.PLAIN, schriftGroesse));
        }
    }

            //der Konstruktor
            public Schaltflaechen(String titel) {
                
                super(titel);
                // 5 Schaltflächen erzeugen.
                schaltflaeche1 = new JButton("NORTH");
                schaltflaeche2 = new JButton("EAST");
                schaltflaeche3 = new JButton("CENTER");
                schaltflaeche4 = new JButton("SOUTH");
                schaltflaeche5 = new JButton("WEST");
                
                // Erweiterung: Bildschirmtipps
                schaltflaeche1.setToolTipText("NORTH");
                schaltflaeche2.setToolTipText("SOUTH");
                schaltflaeche3.setToolTipText("EAST");
                schaltflaeche4.setToolTipText("WEST");
                schaltflaeche5.setToolTipText("CENTER");
                
                //die Größe für die Schrift setzen
                schriftGroesse = 30;
                // Schriftart und Schriftgröße für die Schaltflächen setzen
                schaltflaeche1.setFont(new Font("Arial",Font.PLAIN, schriftGroesse));
                schaltflaeche2.setFont(new Font("Arial",Font.PLAIN, schriftGroesse));
                schaltflaeche3.setFont(new Font("Arial",Font.PLAIN, schriftGroesse));
                schaltflaeche4.setFont(new Font("Arial",Font.PLAIN, schriftGroesse));
                schaltflaeche5.setFont(new Font("Arial",Font.PLAIN, schriftGroesse));
                
                //ein neues Border-Layout
                setLayout(new BorderLayout(25,25));
                
                add(BorderLayout.NORTH, schaltflaeche1);
                add(BorderLayout.EAST, schaltflaeche2);
                add(BorderLayout.CENTER, schaltflaeche3);
                add(BorderLayout.SOUTH, schaltflaeche4);
                add(BorderLayout.WEST, schaltflaeche5);
                                
                //den Listener verbinden
                schaltflaeche1.addActionListener(new SchaltflaechenListener());
                schaltflaeche2.addActionListener(new SchaltflaechenListener());
                schaltflaeche3.addActionListener(new SchaltflaechenListener());
                schaltflaeche4.addActionListener(new SchaltflaechenListener());
                schaltflaeche5.addActionListener(new SchaltflaechenListener());
                
                //die Fenstergröße setzen
                setSize(300, 300);
                
                //die Standardaktion beim Schließen festlegen
                setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                                
                Dimension bGroesse = Toolkit.getDefaultToolkit().getScreenSize();
                //das Fenster positionieren
                setLocation((bGroesse.width - getSize().width) / 2, (bGroesse.height - getSize().height) / 2);
                //oder einfach so
                // setLocationByPlatform(true); Aber laut Aufgabestellung falsch?
                
                //das Fenster anzeigen
                setVisible(true);
            }

            public static void main(String[] args) {
                
                new Schaltflaechen("Schaltflächen in verschiedenen Richtungen");
            }
}
 

thor_norsk

Bekanntes Mitglied
Ich muss die Variablen x und y mit den momentanen Koordinaten des Fensters füllen, weiß zwar nicht wie?
Allerdings habe ich etwas im Internet gefunden.
Point parloc = this.getLocation(); // soll angeblich die aktuelle Position an den Variablen x, y weiterleiten?

Jetzt weiß ich nicht wie man die in einbaut?

Ansatz: Point parloc = this.getLocation oder parent.getLocation // mit parent ?
Anschließend werte setzen: setBounds(parloc.x+0, parloc.y+10) ???

Java:
@Override
        public void actionPerformed(ActionEvent e) {
            
            //würde auf NORTH geklickt
            if (e.getActionCommand().equals("NORTH"))
                // 10 Pixeln nach NORTH
                Point parloc = parent.getLocation();
                  setBounds(parloc.x + 0, parloc.y + 10, 500, 500);

Kann man damit was machen ?
 

KonradN

Super-Moderator
Mitarbeiter
Wieso wechselst Du denn die Methoden, die du nutzt?

Es macht keinen Sinn, im Netz nach irgendwelchen Codes zu suchen, wenn man diese nicht versteht.

Geh den Code doch einmal durch und erkläre mir, was dieser macht. Jeder Aufruf muss verstanden worden sein. Dabei ist mir egal, ob Du den ursprünglichen Code nutzt oder eine neue, angepasste Variante.

Generell hat Dein erster Code ja schon gewisse Dinge gemacht. Da gäbe es also zwei Ansätze:
a) Was läuft falsch? Da wäre also dann zu analysieren, was aus welchem Grund schief läuft.
b) Einfach die Codes an den jeweiligen Stellen neu schreiben und dabei sauber vorgehen:
- Zuerst den Algorithmus in Worten beschreiben / als Kommentare schreiben.
- Dann dies umsetzen.
Das sollte dann zu Code führen, der funktioniert oder der dann zumindest so ist, dass man Fehler einfacher finden kann.
 

thor_norsk

Bekanntes Mitglied
a) Nach EAST, WEST, CENTER funktioniert. NORTH und SOUTH nicht. Bei der Analyse gehe ich davon aus, dass die Koordination auf der X- Achse funktioniert und bei der Y-Achse nicht!
Des weiteres habe ich festgestellt, sobald ich SOUTH bzw NORTH betätige landet das Fenster immer oben rechts (Nullpunkt des Koordinatensystem).
Problem: Ich vermute man muss die aktuelle Position beschaffen und nach Wünsch neue setzen, aber wie ?:D
Also irgendwie mit getLocation() Information beschaffen und mit getLocation() neue Koordinate setzen? oder?
 

KonradN

Super-Moderator
Mitarbeiter
Generell solltest Du Dir genau überlegen, was Du überhaupt machen willst. Code schreiben ohne zu wissen, was man machen will, führt extrem selten zu einer Lösung.

Also Code sollte man verstehen. Was macht eine Zeile:
Java:
 setLocation((bGroesse.width - getSize().width) / 2, (bGroesse.height - getSize().height) / 2);

Und welchen Wert haben bei Dir x und y wenn Du die nutzt beim setzen einer Position?

Also irgendwie mit getLocation() Information beschaffen und mit getLocation() neue Koordinate setzen? oder?
Hast Du denn man geschaut, ob die Klassen des Frameworks irgendwie evtl. ein bisschen dokumentiert sind? Dann könnte man sowas lesen um heraus zu kriegen, ob getLocation nutzbar ist. setLocation scheint ja zu gehen - das hast Du ja etwas ausprobiert.

Ja, getLocation wäre eine Möglichkeit. Man könnte aber auch die Variablen x/y auch erst einmal nutzen. Falls Du das Fenster an eine Position setzt, dann könnte man diese Position z.B. speichern. Wenn man das Fenster mit den Knöpfen verschiebt, könnte man diese Änderung speichern ...

Man könnte auch die Aufgabe lesen - Wenn da die Rede von "vier Schaltflächen" ist und man davon 5 hat ... wenn man die dann auch noch von 1-5 nummeriert, dann ist es total einfach dem EAST Button den Tooltip SOUTH zu geben ....

Oder das man evtl. als Aufgabe etwas hat wie "positionieren Sie es zunächst einer beliebigen Stelle auf dem Desktop." - was bedeutet dies?
 

thor_norsk

Bekanntes Mitglied
Habe die Aufgabe gelöst, und 1 Button entfernt, also 4 Button. und mit SetLocation(...) habe wie Herr Konrad beschrieben hat bzw . die Aufgabe gelöst : Den Inhalt in anderen Variablen gespeichert. Vor Allem x,y ist nicht notwendig.
Vor Allem waren die Bildschirmtipps falsch programmiert bzw . Koordinaten falsch ( EAST, NORTH, usw verwechselt).
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
U Zwei Fragen zu eienr Swing Aufgabe AWT, Swing, JavaFX & SWT 2
C Swing AWT GUI Anfänger Aufgabe AWT, Swing, JavaFX & SWT 7
I Drag & Drop - kriegt Swing diese Aufgabe hin? AWT, Swing, JavaFX & SWT 5
Juelin javax.swing in javafx AWT, Swing, JavaFX & SWT 1
A Eclipse 2023 und Swing AWT, Swing, JavaFX & SWT 4
W 2 JTables in einem Swing-Fenster? AWT, Swing, JavaFX & SWT 5
H Swing Componente zur Läufzeit ändern AWT, Swing, JavaFX & SWT 3
B Actionlistener mit Java Swing AWT, Swing, JavaFX & SWT 2
W Gibt es einen "automatischen Listener" in Swing oder JTable oder der ATM-Klasse? AWT, Swing, JavaFX & SWT 14
H Swing Buttons erst nach Klick sichtbar AWT, Swing, JavaFX & SWT 13
ExceptionOfExpectation Anpassung von JKomponentengrößen (Swing) AWT, Swing, JavaFX & SWT 3
M Swing Bilder in Swing anzeigen AWT, Swing, JavaFX & SWT 9
H Swing , GridLayout, Größenbestimmung der Komponenten im Layout AWT, Swing, JavaFX & SWT 8
H Simple Animation mit Swing AWT, Swing, JavaFX & SWT 2
Guybrush Threepwood Einfachste Möglichkeit zum Abspielen eines Videos in Swing AWT, Swing, JavaFX & SWT 4
A Swing ProgressBar über 2 parallel laufende Threads AWT, Swing, JavaFX & SWT 2
M Swing GridLayout AWT, Swing, JavaFX & SWT 2
O return-Statement mit Swing AWT, Swing, JavaFX & SWT 6
O Ein Java-Programm mit Swing steuern AWT, Swing, JavaFX & SWT 1
Monokuma Swing zu JavaFX AWT, Swing, JavaFX & SWT 5
J Swing Slider AWT, Swing, JavaFX & SWT 11
G Thread starten Swing AWT, Swing, JavaFX & SWT 5
G Swing JPasswordField AWT, Swing, JavaFX & SWT 12
L Swing Button Farbe ändern/wechseln AWT, Swing, JavaFX & SWT 2
W Inject bei einem Swing Frontend AWT, Swing, JavaFX & SWT 8
L Kommunikation zwischen Klassen / Konstruktoren bei Swing AWT, Swing, JavaFX & SWT 9
M Feldvalidierung swing AWT, Swing, JavaFX & SWT 4
E Swing Componenten werden nach Änderung des display modes verzerrt dargestellt AWT, Swing, JavaFX & SWT 8
D [Swing] Anordnung von Komponenten mit GridLayout Manager AWT, Swing, JavaFX & SWT 13
O Zukunft von Swing und JavaFX ? AWT, Swing, JavaFX & SWT 3
S Swing Fenster State Machine AWT, Swing, JavaFX & SWT 1
T Swing Swing an Bildschirm anpassen AWT, Swing, JavaFX & SWT 3
S Swing Panel wird nicht neu gezeichnet AWT, Swing, JavaFX & SWT 3
M Swing Java Swing/AWT Combobox Bug AWT, Swing, JavaFX & SWT 3
M Swing GUI mittels erben sowie variabler Dateninhalt AWT, Swing, JavaFX & SWT 1
W Swing Multitouch mit Swing AWT, Swing, JavaFX & SWT 6
S Swing-Applikation die ein Numpad nachbildet samt Keybindings..? AWT, Swing, JavaFX & SWT 5
S Swing Java Swing AWT, Swing, JavaFX & SWT 6
Blender3D Problem mit € Symbol Font Gotham Windows 10 Swing AWT, Swing, JavaFX & SWT 11
J Swing oder JavaFX AWT, Swing, JavaFX & SWT 21
D Swing Anwendung ohne JPanel erstellen AWT, Swing, JavaFX & SWT 1
D SQL Statements mit Java Swing benutzen AWT, Swing, JavaFX & SWT 4
Damtonix BufferStrategy flackert (Swing) AWT, Swing, JavaFX & SWT 9
D DatePicker für Java Swing AWT, Swing, JavaFX & SWT 2
B JavaFX oder swing AWT, Swing, JavaFX & SWT 3
T Java Swing - kleines Rechteck unter dem cursor AWT, Swing, JavaFX & SWT 5
L 2D-Grafik Swing paint|paintComponent AWT, Swing, JavaFX & SWT 2
L Swing Größe automatisch anpassen AWT, Swing, JavaFX & SWT 14
G Swing Swing Binding JList funktioniert nicht AWT, Swing, JavaFX & SWT 5
Blender3D Meine Swing Anwendung läuft unter Windows 10 und Ubuntu aber nicht auf Windows 7 AWT, Swing, JavaFX & SWT 16
B Bar Plot in Swing JPanel AWT, Swing, JavaFX & SWT 0
D Swing in Kombination mit JGraphX und JGraphT AWT, Swing, JavaFX & SWT 0
F main-Funktion bei Swing AWT, Swing, JavaFX & SWT 4
S Java Swing Print() method AWT, Swing, JavaFX & SWT 4
S Java Swing auf Windows Phone AWT, Swing, JavaFX & SWT 6
I JAVAFX - Übergabe der Inhalte an eine Scene - Wo ist der Vorteil gegenüber Swing? AWT, Swing, JavaFX & SWT 2
S Manuelles Menu in Swing AWT, Swing, JavaFX & SWT 3
T Custom Window ohne Swing / AWT / FX..?! AWT, Swing, JavaFX & SWT 1
MaxG. Swing Swing Komponenten zur Laufzeit hinzufügen AWT, Swing, JavaFX & SWT 2
Java_RY Bin Ratlos bzgl Malen in Swing AWT, Swing, JavaFX & SWT 5
offi Swing Shuttle List AWT, Swing, JavaFX & SWT 9
I Graph mit Swing zeichnen AWT, Swing, JavaFX & SWT 8
D Swing Swing Objekte sehen im Entwurf anders aus als beim Ausführen AWT, Swing, JavaFX & SWT 3
S Swing & Clean und build Problem AWT, Swing, JavaFX & SWT 12
javampir Swing repaint in JavaFX Anwendung AWT, Swing, JavaFX & SWT 3
K Mit JavaFX angefangen. Lohnt sich Swing? AWT, Swing, JavaFX & SWT 28
B Swing Update Swing Komponente bevor Methode startet. AWT, Swing, JavaFX & SWT 4
B Swing Tabelle(JTable) filtern swing GUI AWT, Swing, JavaFX & SWT 3
M Swing Swing-Widgets und paintComponent() AWT, Swing, JavaFX & SWT 2
B Swing WindowBuilde: Menu -> anderes Panel wechseln AWT, Swing, JavaFX & SWT 1
K eigener button in swing AWT, Swing, JavaFX & SWT 3
A JavaFX DatePicker in Swing beim Start nicht sichtbar AWT, Swing, JavaFX & SWT 2
windl Bufferstrategy in Swing nachstellen AWT, Swing, JavaFX & SWT 0
M Kamera in Java Swing einbinden AWT, Swing, JavaFX & SWT 4
Z Swing Swing und die Progressbar AWT, Swing, JavaFX & SWT 1
J Frage zur objektorentierten Swing Programmierung AWT, Swing, JavaFX & SWT 10
Xanny 2D-Grafik Beginner! Probleme mit Swing, Gprahics class und paint AWT, Swing, JavaFX & SWT 13
F Java Swing Rechteck in JPanel zeichnen AWT, Swing, JavaFX & SWT 7
N Swing Benötige Hilfe um ein Swing Canvas zu speichern AWT, Swing, JavaFX & SWT 4
stylegangsta JButton Fehelr javax.swing.ImageIcon.<init>(Unknown Source) AWT, Swing, JavaFX & SWT 24
RalleYTN Swing JavaFX VideoPlayer in Swing einbetten. Ich komm nicht an die Dimension des Videos! AWT, Swing, JavaFX & SWT 0
T swing läuft nur beding flüssig AWT, Swing, JavaFX & SWT 1
A Sonderzeichen bei Swing AWT, Swing, JavaFX & SWT 3
L DoubleBuffering unter Swing AWT, Swing, JavaFX & SWT 0
N Programm mit Swing und Thread, Figur bewegen sich nicht AWT, Swing, JavaFX & SWT 6
D Java Swing, Label lässt sich nicht mit Checkboxen/Knopf verändern AWT, Swing, JavaFX & SWT 2
J Swing Basics - JButton funktioniert nicht. AWT, Swing, JavaFX & SWT 1
J Swing/AWT | Dynamisch erzeugte Objekte ansprechen AWT, Swing, JavaFX & SWT 1
N JavaFX Umstieg von Swing auf Java FX AWT, Swing, JavaFX & SWT 6
J GUI Anfänger einfaches Program AWT, Swing, JavaFX & SWT AWT, Swing, JavaFX & SWT 3
M Swing Grundlegende Frage zu SWING mit WindowBuilder AWT, Swing, JavaFX & SWT 11
M Plugin oder eigenes Tool mit zB SWING AWT, Swing, JavaFX & SWT 2
Z Java-Swing : JComponent AWT, Swing, JavaFX & SWT 2
Z Swing Swing: Elemente werden doppel/verschoben gezeichnet, sind teils unsichtbar etc... AWT, Swing, JavaFX & SWT 10
S JComboBox aus anderer Klasse füllen (Java-Swing) AWT, Swing, JavaFX & SWT 0
N JComboBox in JTable [Swing] -> totaler UI-Einsteiger AWT, Swing, JavaFX & SWT 3
T Swing Kompatibilitätsproblem zwischen Swing und JavaFX AWT, Swing, JavaFX & SWT 4
M Layout-Probleme unter Swing AWT, Swing, JavaFX & SWT 5
T Swing / Kreis zeichnen AWT, Swing, JavaFX & SWT 2
S (Swing)Vollbild anzeigen unter Linux/Mac AWT, Swing, JavaFX & SWT 6

Ähnliche Java Themen

Neue Themen


Oben