Wie mache ich es, dass pro ordner ein JButton hinzugefügt wird?

Ich möchte eine Art Wiki mit Java machen, wo man Sachen herunterladen kann damit dass dann in der App angezeigt wird, doch ich weiß nicht wie ich es mache, dass ein JButton hinzugefügt wird wenn ein Ordner, da ist. Ich möchte dann auch, dass wenn man auf dem Button draufklickt, dass dann die Dateien darin auch aufgelistet werden und dann, wenn man darauf klickt, dass dann der inhalt der Datei angezeigt wird, kann mir jemand helfen?

Main.java

import javax.swing.*;

public class Main {
    public static void main(String[] arg) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new Frame();
            }
        });
    }
}

Frame.java

import javax.swing.*;

public class Frame extends JFrame {
    public Frame() {
        setResizable(false);
        setSize(1000, 700);
        setDefaultLookAndFeelDecorated(true);
        setLocationRelativeTo(null);
        setTitle("JWiki.jar");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        add(new Panel());

        setVisible(true);
    }
}

Panel.java

import javax.swing.*;
import java.awt.*;

public class Panel extends JPanel { //GUI
    public Panel() {
        //Labels and Buttons
        JLabel l0 = new JLabel();
        l0.setText(".");
        l0.setBounds(0, 10, 10, 5);
        l0.setVisible(true);

        JLabel l1 = new JLabel();
        l1.setText("Downloaded Wikis");
        l1.setBounds(5, -10, 110, 50);
        l1.setVisible(true);

        JLabel l2 = new JLabel();
        l2.setText("Wiki Pages");
        l2.setBounds(120, -10, 65, 50);
        l2.setVisible(true);

        JButton b1 = new JButton();
        b1.setText("Test");
        b1.setBounds(5, 30, 101, 25);
        b1.setVisible(true);


        //Adding Labels and Buttons
        add(l0);
        add(l1);
        add(l2);

        add(b1);

        setLayout(null);
    }

    @Override
    public void paint(Graphics g) {
        super.paint(g);
        draw(g);
    } public void draw(Graphics g) {
        g.setColor(Color.black);
        g.fillRect(115, 5, 2, 700);
        g.fillRect(190, 0, 2, 700);
        g.fillRect(0, 5, 190, 2);
        g.fillRect(0, 25, 190, 2);
    }
}

Java, Code, Programmiersprache, Java Swing, IntelliJ IDEA
Code Error Java?
public class Main {
public static void main(String[] args) {


    GUI gui = new GUI();
    
    }
    
   public static int fak (int n) {
        if (n == 0) {
            return 1;
        }
        return n * fak(n - 1);
    }
    
}

import javax.swing.*;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;


import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;


public class GUI extends JFrame {
    JButton button = new JButton("Berechnen");
    JLabel label = new JLabel("Bitte geben Sie die Zahl ein: ");
    JTextField textfield = new JTextField(2);
    JOptionPane popup = new JOptionPane();
    JPanel panel = new JPanel();
    
    public GUI () {
        setSize(300, 300);
        setTitle("Fakultätsrechner");
        setLayout(new FlowLayout());
        setVisible(true);
        
        panel.add(textfield);
        panel.add(label);
        panel.add(button);
        add(panel);
        
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setVisible(true);


        button.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                try {
                    String input = textfield.getText();
                    int number = Integer.parseInt(input);
                    int result = Main.fak(number);
                    JOptionPane.showMessageDialog(null, "Die Fakultät von " + number + " ist " + result);
                } catch (NumberFormatException ex) {
                    JOptionPane.showMessageDialog(null, "Bitte geben Sie eine gültige Ganzzahl ein.");
                }
            }
        });
        
    }





}

Error: java.lang.ClassNotFoundException: Main

Aber wieso findet er denn die Main-Klasse nicht? Verstehe ich nicht.

App, Java, Minecraft, Array, Code, Eclipse, Minecraft Server, Programmiersprache, Swing, game-development, Bukkit, Spigot, Java Swing, Android Studio
GUI in Taschenrechner integrieren (Java)?
import java.util.Scanner;
import javax.swing.JTextField;
public class App {
    public static void main(String[] args) {
    
        Scanner scanner = new Scanner(System.in);


        new GUI();
        
        try {
        System.out.println("Bitte geben Sie ihre Berechnung ein: ");
        String eingabe = scanner.nextLine();
        String[] teile = eingabe.split(" ");
        
        double zahl1 = Double.parseDouble(teile[0]);
        double zahl2 = Double.parseDouble(teile[2]);
        char operator = teile[1].charAt(0);
        
        System.out.println(taschenrechner(eingabe, zahl1, zahl2, operator));
        
    } catch (NumberFormatException e) {
            System.out.println("Bitte geben Sie einen gültigen Wert ein!");
        } finally {
            scanner.close();
        }
    }
    
    static double taschenrechner (String eingabe, double zahl1, double zahl2, char operator) {


        double ergebnis = 0.0;


        if (operator == '/' && zahl2 == 0) {
            throw new ArithmeticException("Das dividieren durch 0 ist nicht erlaubt!");
        }
        
        switch (operator) {
            case '-': ergebnis = zahl1 - zahl2; break;
            case '+': ergebnis = zahl1 + zahl2 ; break;
            case '*': ergebnis = zahl1 * zahl2; break;
            case '/': ergebnis = zahl1 / zahl2; break;
        }
            return ergebnis;
    }    
}

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
import java.awt.*;


public class GUI extends App{


    private JTextField textFieldZahl1;
    private JTextField textFieldZahl2;
    private JTextField textFieldOperator;
    private JLabel labelErgebnis;
    private JButton buttonBerechnen;
    
    public GUI () {


    JFrame frame = new JFrame("Taschenrechner");
        frame.setLayout(new FlowLayout());
        frame.setSize(500, 500);
        frame.add(new JButton("+"));
        frame.add(new JButton("-"));
        frame.add(new JButton("*"));    
        frame.add(new JButton("/"));
        frame.add(new JTextField(20));
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
}

Wie kann ich die GUI jetzt mit der Taschenrechner-Logik verknüpfen?

Java, Code, Eclipse, Programmiersprache, Algorithmus, Java Swing
JPanel und JButton verschieben?
import javax.swing.*;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.awt.event.*;
public class Engine extends Thread {
  public JFrame frame = new JFrame("drawWorld");
  public JPanel panel;
  public JButton startGame = new JButton("START");
  public JLabel highscore = new JLabel("HIGHSCORE: ");
  public JLabel score = new JLabel("CURRENT SCORE: ");
  public int shift = 0;
  public int bounce = 0;
  public Player player;
  public Engine(Player pPlayer) {
    frame.setExtendedState(frame.getExtendedState() | JFrame.MAXIMIZED_BOTH);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setLocationRelativeTo(null);
    this.player = pPlayer;
  }

  public void startdraw(List blocks) {
    panel = new JPanel() {
      @Override
      protected void paintComponent(Graphics g) {

        List<Block> world = blocks.copy(); //Kopiert das Listenobjekt, damit es nicht zu einem doppeltem Zugriff kommt

        super.paintComponent(g);
        BufferedImage buffer = new BufferedImage(frame.getWidth(), frame.getHeight(), BufferedImage.TYPE_INT_ARGB);
        Graphics bufferGraphics = buffer.getGraphics();
        player.isUpdating = true;
        if (player.dead == false) {
          bufferGraphics.drawImage(player.texture, (int)frame.getWidth() / 2 - 75, (int)frame.getHeight() / 2, 150, 150, null);
          world.toFirst();
          while (world.getContent() != null) {
            Block currentDrawing = (Block)world.getContent();
            if (currentDrawing != null) {
              bufferGraphics.drawImage(currentDrawing.texture, (int)currentDrawing.x*100 - shift + ((int)frame.getWidth() - 1000) / 2 - 350, (int)currentDrawing.y*100 + bounce + 45 + ((int)frame.getHeight() - 1000) / 2, (int)100, (int)100, null);
            }
            world.next();
          }
        }
        score.setText("CURRENT SCORE: " + player.world.score);
        highscore.setText("HIGHSCORE: " + player.world.highscore);
        g.drawImage(buffer, 0, 0, null);
        player.isUpdating = false;
      }
    };

    startGame.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
          player.reset();
          player.dead = false;
          panel.remove(startGame);
          frame.requestFocusInWindow();
          frame.repaint();
        }
      });

    frame.add(panel);
    panel.add(this.highscore);
    panel.add(this.score);

    if (player.dead) {
      panel.add(this.startGame);
    }
    frame.setVisible(true);
  }

  public void update() {
    frame.repaint();
  }
}

Hallo Leute,

ich habe mich gefragt, wie ich die Objekte this.highscore, this.score und this.startGame verschieben kann. Ich habe schon mehrere Möglichkeiten ausprobiert. setBounds, setHorizontal / VerticalAlignment haben nicht funktioniert. Woran liegt das?

Danke im Vorraus!

Spiele, App, Programm, Java, Code, Programmiersprache, Swing, game-development, Java Swing
Java: Possible lossy conversion from double to int?

Guten Tag,

ich möchte ein Bild anzeigen, die Position dabei aber in einem double angeben. currentDrawing.x / y sind bereits double Werte. Weiß jemand, warum dieser Fehler aufkommt? Oder kann die Methode nur Integer annehmen? Vielen Dank schonmal!

public void startdraw(List world) {
        JPanel panel = new JPanel() {
            @Override
            protected void paintComponent(Graphics g) {
                super.paintComponent(g);
                BufferedImage buffer = new BufferedImage(frame.getWidth(), frame.getHeight(), BufferedImage.TYPE_INT_ARGB);
                Graphics bufferGraphics = buffer.getGraphics();
                world.toFirst();
                while (world.getContent() != null) {
                    Block currentDrawing = (Block)world.getContent();
                    if (currentDrawing != null) {
                        bufferGraphics.drawImage(currentDrawing.texture, currentDrawing.x*50.0, currentDrawing.y*50.0, (int)50, (int)50, null);
                    }
                    world.next();
                }
                g.drawImage(buffer, 0, 0, null);
            }
        };


        frame.add(panel);
        frame.setVisible(true);
    } 
Bild zum Beitrag
Fehler, Java, Code, Programmiersprache, Swing, double, Integer, Java Swing
Wie ändere ich die Größe der einzelnen JPanels bei einem BorderLayout in Java?

Hallo.

Ich habe in Java einen JFrame erstellt in dem ein JPanel ist, indem sich ein anderes JPanel (mit BorderLayout) befindet das 2 JPanels enthält.

Also so etwa:

JFrame/JPanel/JPanel(BL)
              > JPanel(NORTH)
              > JPanel(SOUTH)

(BL = BorderLayout)

Ich will das die 2 JPanels die in den BL sind so angeordnet sind wie das Spielfeld und das Inventar bei den Zelda NES Spiel aus den 90ern (Bild unten).

Das nördliche JPanel(NORTH) soll das Inventar sein während das südliche(SOUTH) das Spielfeld sein soll auf dem sich das eigentliche Geschehen mit dem Spieler, NPCs, Map usw. abspielt.

Jetzt ist jedoch das Problem dass das JPanel dass das Spielfeld ist fast den ganzen Platz einnimmt:

Spielfeld Panel (Schwarz). Inventar Panel (Grün)

Ich will jedoch das es ungefähr so angeordnet ist:

Wie zu sehen ist, ist bei dem Zelda Spiel das Inventar deutlich größer, während es bei mir eher wie ein Strich aussieht.

Ich habe die Größe des Spielfeld Panels schon definiert, die des Inventar Panels auch.

Ich habe die beiden Panels (Spielfeld und Inventar) in das JP mit dem BL gemacht, welches ich einen anderen JPanel hinzugefügt habe, welches sich im JFrame befindet.

Dann habe ich das JFrame der Größe seiner JPanels eingeglichen mit frame.pack()

(Mein JFrame heißt frame)

Ich habe versucht die Größe der beiden Panels auf verschiedenste Art und Weise zu ändern, jedoch ohne Erfolg.

Ich würde mich freuen wenn jemand eine Lösung dafür kennt.

Danke im voraus.

Bild zum Beitrag
programmieren, Java, Eclipse, Programmiersprache, Swing, Java Swing
Hintergrund in Java GUI?

Heyho,

Ich möchte gerne in meiner GUI einen Hintergrund einfügen, da es sonst so trostlos wirkt. Es soll das Bild "GameBackground.jpg" genutzt werden.

Hier ist der Code:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*; 
import ch.aplu.turtle.*;

/**
 *
 * Ein Spiel mit GUI
 *
 * @version 1.0 vom 19.05.2023
 * @abraham_oez 
 */

public class frame extends JFrame {
  private Button bSpielstarten1 = new Button();
  // Anfang Attribute
  private Button bHowtoplay1 = new Button();
  private Button bCopyright1 = new Button();
    private JMenu jMenuBar1_File = new JMenu("Spiel");
      private JMenu jMenuBar1_File_New = new JMenu("Neues Spiel");
  
  private JLabel Label1 = new JLabel();
  // Ende Attribute
  public frame() { 
    // Frame init
    super();
    setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
    int frameWidth = 746; 
    int frameHeight = 562;
    setSize(frameWidth, frameHeight);
    Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
    int x = (d.width - getSize().width) / 2;
    int y = (d.height - getSize().height) / 2;
    setLocation(x, y);
    setTitle("Games by Abie D. Tate");
    setResizable(false);
    Container cp = getContentPane();
    cp.setLayout(null);
    setUndecorated(false);
    cp.setBackground(new Color(0xC0C0C0));
    // Anfang Komponenten
    
    bSpielstarten1.setBounds(288, 104, 176, 48);
    bSpielstarten1.setLabel("Spiel starten");
    bSpielstarten1.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent evt) { 
        bSpielstarten1_ActionPerformed(evt);
      }
    });
    cp.add(bSpielstarten1);
    bHowtoplay1.setBounds(285, 224, 176, 48);
    bHowtoplay1.setLabel("How to play");
    bHowtoplay1.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent evt) { 
        bHowtoplay1_ActionPerformed(evt);
      }
    });
    cp.add(bHowtoplay1);
    bCopyright1.setBounds(288, 352, 176, 48);
    bCopyright1.setLabel("Lizenzen");
    bCopyright1.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent evt) { 
        bCopyright1_ActionPerformed(evt);
      }
    });
    cp.add(bCopyright1);

    // Ende Komponenten
    setVisible(true);
  }  
  
  
  
  public static void main(String[] args) {
    new frame();
  }  
  
  // Anfang Methoden
  public void bSpielstarten1_ActionPerformed(ActionEvent evt) {
    // TODO hier Quelltext einfügen
    
  } 

  public void bHowtoplay1_ActionPerformed(ActionEvent evt) {
    // TODO hier Quelltext einfügen
    
  }  
  
  //Nachdem der Button 'Copyright' gedrueckt wurde, wird die Klasse 'CopyrightFrame' geoeffnet in einem neuen Fenster
  public void bCopyright1_ActionPerformed(ActionEvent evt) {
    
    if (evt.getSource() == bCopyright1) {
      CopyrightFrame copyrightFrame = new CopyrightFrame();
    } 
    
  }  

} 

Java, Programmiersprache, Swing, Java Swing
Informatik (Java) Zwei Frames mit dem selben Konstruktor?

Hey, ich hab eine Aufgabe bekommen, welche ich aber leider nicht wirklich gut lösen kann.
Die Aufgabe besteht darin, dass die Klasse mit JFrame erweitert werden soll und das der Actionlistener implementiert werden soll. Der Frame soll dabei im FlowLayout aus 2 Button bestehen mit den Aufschriften "Weiter" und "Ende".

Wird "Weiter" gedrückt = Erste Frame wird geschlossen und ein zweiter Frame mit NUR dem Button "Ende" wird geöffnet.

Wird "Ende" gedrückt = Alle Frames schließen sich und das Programm wird beendet.

Die beiden Frames sollen dabei mit dem selben Konstruktor erstellt werden.
Das Problem bei mir ist, dass ich es nicht schaffe beim 2. Frame nur "Ende" zu stehen haben.

Kann mir da bitte wer helfen??

Hier ist das, was ich bisher versucht habe:

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import javax.swing.*;

public class zweifenster extends JFrame implements java.awt.event.ActionListener {

  JButton w1;

  JButton e1;

  JPanel p;

  JLabel l;

  public zweifenster(){

    super();

  this.setVisible(true);

  this.setSize(400, 200);

  p = new JPanel();

  l = new JLabel();

  w1 = new JButton("Weiter");

  e1 = new JButton("Ende");

  w1.addActionListener(this);

  e1.addActionListener(this);

  p.add(w1);

  p.add(e1);

  this.add(p);

  this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

  }

  public void actionPerformed(ActionEvent e) {

  if(e.getSource()==w1) {

    zweifenster frr = new zweifenster();

    this.dispose(); 

   }

    if(e.getSource()==e1) {

      System.exit(0);

    }

  }

  public static void main (String[] args) {

    zweifenster fr = new zweifenster();

}

}

Java, Programmiersprache, Swing, Java Swing
Java-Projekt: Wie lasse ich den Inhalt der Datenbank in einer Tabelle anzeigen?

Ich habe jetzt über mehrere Wege versucht, den Inhalt der Datenbank in der Tabelle anzeigen zu lassen und bin immer wieder auf mehr Probleme gestoßen. Kann mir jemand helfen?

Ich weiß nicht, wie ich das angehen soll und ob ich den Anfang überhaupt richtig habe.

Ich kopiere den Code aus der Datenbankklasse mal rein.

package kontaktVerwaltung;

import java.awt.Checkbox;
import java.awt.GraphicsConfiguration;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import javax.swing.JOptionPane;
import com.mysql.cj.protocol.Resultset;

class Db {
  private kontaktVerwaltungClass cw;

  public Db(kontaktVerwaltungClass cw) {
    this.cw = cw;
  }

  public void speichern() {
    String url = "jdbc:mysql://localhost:3306/verwaltung";
    String user = "root";
    String pass = "";

    try {
      Connection con = DriverManager.getConnection(url, user, pass);
      String sql = "insert into contact(name, adress, postcode, website) values(?,?,?,?)";
      PreparedStatement pstmt = con.prepareStatement(sql);
      pstmt.setString(1, cw.tfName.getText());
      pstmt.setString(2, cw.tfAdress.getText());
      pstmt.setString(3, cw.tfPostcode.getText());
      pstmt.setString(4, cw.tfWebsite.getText());
      pstmt.execute();

      con.close();
    }
    catch (SQLException e) {
      JOptionPane.showMessageDialog(null, e.getMessage());
    }
  }

  public void show() {
    String url = "jdbc:mysql://localhost:3306/verwaltung";
    String user = "root";
    String pass = "";

    try {
      Connection con = DriverManager.getConnection(url, user, pass);
      String query1 = "SELECT * FROM contact";
      Statement st = con.createStatement();
      ResultSet rs = st.executeQuery(query1);
      kontaktVerwaltungClass kw;

      while(((ResultSet) rs).next()) {
        kw = new kontaktVerwaltungClass();
        kw.tbShow.add(rs);
      }

      con.close();
    }
    catch (SQLException e) {
      JOptionPane.showMessageDialog(null, e.getMessage());
    }
  }
}
Java, Datenbank, MySQL, Java Swing
Java Fenster Hintergrundfarbe ändern?

Hallo und guten Tag,

ich möchte die Hintergrundfarbe von einem Javafenster ändern. Doch wenn ich es wie unten gezeigt mache, dann blinkt die Farbe beim Starten nur einmal kurz auf.

Das hier ist der ganze Code:

public class Main extends JFrame{
    
    static JButton button;
    

    public Main() {
        JFrame frame = new JFrame("Clicker");
        frame.setSize(500, 400);
        frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
        frame.setResizable(true);
        frame.setLocationRelativeTo(null);
        frame.setLayout(null);
        frame.requestFocus();
        frame.setBackground(new Color (30, 34, 71));
        
        
        button = new JButton("Click Here!");
        button.setBounds(100, 75, 200, 150);
        button.setFocusPainted(false);
        button.setBorder(BorderFactory.createRaisedBevelBorder());
        button.addActionListener(new ActionHandler());
        button.setBackground(new Color (30, 34, 71));
        frame.add(button);
        
        
        
        
        
        frame.setVisible(true);
        
    }

    public static void main(String[] args) {
        new Main();
        
    }

}
Computer, Fenster, programmieren, Java, Java Swing
Java JTable; Tabelle begrenzen?

Mein Problem ist das die Tabelle zu weit nach unten geht.

table.setSize(); habe ich schon versucht, funktioniert aber nicht.

Hier der Code:

JPanel profilname_panel = new JPanel();

      String[][] data = {
        { "test", ""},
        { "", ""},
        { "", ""},
        { "", ""},
        { "", ""},
        { "", ""},
     };
     String[] rows = { "Name", "Picture"};
     JTable table = new JTable(data, rows);    
     table.setDefaultEditor(Object.class, null);
     table.setCellSelectionEnabled(false);
     table.setFocusable(false);
     table.setAutoscrolls(false);
     table.setRowHeight(table.getRowHeight() + 60);
     profilname_panel.setLocation(20,20);
     profilname_panel.setSize(550,180);
     profilname_panel.add(new JScrollPane(table));
     profilname_speichern.add(profilname_panel);


       profilname_speichern.setVisible(true);

Das sieht dann so aus. Ich möchte aber das, die Tabelle nur so groß ist und man nach unten scrollen kann. Weil wenn ich jetzt das JPanel größer mache, dann geht es richtig. Ist nur nicht das was ich möchte.

Eigentlich soll es so wie auf den ersten Bild aussehen, mit den Unterschied das die Tabelle, diese größe hat und man dadurch runterscrollen kann.

Wie kann man die größe der Tabelle ändern?

Bild zum Beitrag
Computer, Java, Informatik, Java Swing
Java Gui: alles verschwindet nach hinzufügen von JButton?

Guten Tag zusammen,

wenn ich die JButtons hinzufüge verschwindet der JLabel und der Button selber.

ich weis nicht wie ich da vorgehen soll, weil ich erst heute mit Gui angefangen habe zu arbeiten.

Das Bild zeigt, wie es mir anzeigt, wenn ich die JButtons hinzufüge.

Ich würde mich auf eure Antworten freuen :)

import java.awt.Color;
import java.awt.Container;
import java.awt.Font;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class Game {

    JFrame window;
    Container con;
    JPanel titleNamePanel;
    JPanel startButtonPanel;
    JLabel titleNameLabel ;
    Font titleFont = new Font("Times New romans", Font.PLAIN, 28);
    JButton startButton;
    public static void main(String[] args) {

        new Game();

    }

    public Game() {

        window = new JFrame();
        window.setSize(800, 600);
        window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        window.getContentPane().setBackground(Color.black);
        window.setLayout(null);
        window.setVisible(true);
        con = window.getContentPane();

        titleNamePanel = new JPanel();
        titleNamePanel.setBounds(100, 100, 600, 150);
        titleNamePanel.setBackground(Color.blue);
        titleNameLabel = new JLabel("TEST");
        titleNameLabel.setForeground(Color.white);
        titleNameLabel.setFont(titleFont);

        startButtonPanel = new JPanel();
        startButtonPanel.setBounds(300, 400, 200, 100);
        startButtonPanel.setBackground(Color.blue);

        startButton = new JButton("START");
        startButton.setBackground(Color.black);
        startButton.setForeground(Color.white);
        
        titleNamePanel.add(titleNameLabel);
        startButtonPanel.add(startButton);
        con.add(titleNamePanel);
        con.add(startButtonPanel);

    }
}
Bild zum Beitrag
programmieren, Java, Code, jButton, Java Swing
Java GUI für Game erstellen: Platzierungsprobleme?

Hallo,

ich soll eine grafische Oberfläche für ein Spiel kreieren. Es soll aus einem JLabel (Überschrift), drei JButtons (für Start, eins setzen, zwei setzen) und eine Zeichnung (Graphics g) bestehen. Jetzt geht es erst einmal nur darum, dass richtig zu platzieren. Ich habe schon jegliche Layouts ausprobiert, aber ich bekomme es einfach nicht hin.

So soll es aussehen:

So bekomme ich es höchstmöglich hin:

Das ist der Code:

public class MyUI {
  public static void main(String[] args) {
    JFrame fenster = new JFrame("NIM-Spiel");
    MyJPanel grafiken = new MyJPanel();
    JPanel panel = new JPanel();
    panel.setLayout(new GridBagLayout());

    GridBagConstraints gbc = new GridBagConstraints();
    gbc.insets = new Insets(5, 5, 5, 5);

    JLabel ueberschrift = new JLabel("Variante des NIM-Spiels");+
    ueberschrift.setFont(new Font("ARIAL", Font.BOLD, 25));
    ueberschrift.setVerticalAlignment(JLabel.TOP);
    ueberschrift.setHorizontalAlignment(JLabel.CENTER);
    panel.add(ueberschrift);

    JButton startButton = new JButton("START");
    gbc.gridx = 0;
    gbc.gridy = 1;
    gbc.fill = GridBagConstraints.HORIZONTAL;
    panel.add(startButton, gbc);

    JButton button1 = new JButton("Eins setzen");
    gbc.gridx = 0;
    gbc.gridy = 2;
    panel.add(button1, gbc);

    JButton button2 = new JButton("Zwei setzen");
    gbc.gridx = 0;
    gbc.gridy = 3;
    panel.add(button2, gbc);

    fenster.setSize(1000, 570);
    fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    fenster.setLocationRelativeTo(null);
    fenster.setResizable(false);
    fenster.setContentPane(grafiken);
    fenster.add(panel);
    fenster.setVisible(true);
  }
}

Mit dem GridBagLayout hatte ich die besten Ergebnisse. Aber perfekt ist das nicht, mit dem GridLayout ging es auch nicht. Das BorderLayout hat nur das JPanel richtig positioniert, dafür konnte ich das set vertical und horizontal alignment wegmachen.

Wäre es vielleicht die Lösung, ein BorderLayout zu kreieren, wo oben das JLabel platziert, unten dann die Zeichnung und in der Mitte für die Buttons ein GridLayout eingeschoben wird? Also ein Layout in einem Layout?

Das ist noch zusätzlich meine Klasse für die Zeichnung: https://pastebin.com/Z6QSAHpm

PS.: Erst durch Setzen von superpaint g wurde die Zeichnung überhaupt im Fenster erstellt. Woran liegt das?

Bild zum Beitrag
Computer, Technik, programmieren, Java, Eclipse, Informatik, Technologie, Grafische Oberfläche, Java Swing, Spiele und Gaming

Meistgelesene Fragen zum Thema Java Swing