Java Swing – die meistgelesenen Beiträge

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

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

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

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

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