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
Division in Assembly. Zeichen sind in ASCII gespeichert?
section .text
global main

main:
  mov esi, 10           ; ESI holds current number
  mov eax, 0           ; EAX holds sum of numbers
  push 10             ; Line feed for end of line (Stack is first in, last out -> Line feed will be last char)
  mov edi, 10           ; Divisor of 10 for seperating digits of number (used in divisionLoop)



; Sum numbers 1 through 10
sumLoop:
  add eax, esi          ; Add number to sum
  dec esi             ; Next number
  jnz sumLoop           ; Loop until 0



; Seperate eax into its digits, by dividing by 10 multiple times,
; where in each division the remainder will be a single digit 
; and the quotient will be the remaining digits used as dividend in next loop run
divisionLoop:
  mov edx, 0           ; Make sure edx is empty, as it is used as upper half of dividend
  div edi             ; Divide eax by edi (= 10) => quotient is in eax (= Rest of digits for next loop), remainder in edx (= Single digit)
  add edx, 48           ; Make edx (digit) a char representing its value by adding '0' to it
  push edx            ; Push char to stack for usage in print later

  cmp eax, 0           ; Loop until quotient is 0 (=> no more digits left)
  jne divisionLoop



; Print digits from Stack one by one
printLoop:
  mov eax, 4
  mov ebx, 1
  mov ecx, esp          ; Print top of stack (esp always points to top of stack)
  mov edx, 1           ; Length of 1 byte (= 1 char)
  int 80h

  pop esi             ; Remove top of stack
  cmp esi, 10           ; Loop until Line feed is reached
  jne printLoop


exit:
  mov eax, 1
  mov ebx, 0           ; Exit code 0
  int 80h

Hallo,

hier steht ein Programm in Assembler, dass die Zahlen von 1 bis 10 addiert.

Die 55 durch 10 teilt und die Reste der Division dann in einem Stack speichert.

push....

Am Ende wird alles über den Standardkanal ausgegeben auf der Konsole.

Wenn ich 55 / 10 teile ergibt das Quotient 5 steht in Register eax und der Rest hier auch 5 in edx Register. Bevor ich jetzt den Rest auf den Stack lege wird die Zahl mit 48 addiert. ergbit 53 ist das char Zeichen 5 im ASCII Code.

Heißt das jetzt, dass die Ergebnisse bei einer ganzzahligen Division im Assembler-Code immer in ASCII-Zeichen gespeichert sind?

Computer, Mathematik, Java, Assembler, Informatik, Programmiersprache
Ist das beeindruckend, einen Bot programmiert zu haben?

Seid gegrüßt liebe GuteFrage.net-Community,

es gab vor kurzem auf dem Minecraft-Server "GommeHD.net" ein r/place Event, bei welchem man alle 20 Sekunden einen Block platzieren kann. Nun gab es da eine gewisse Community, welcher ich angehöre, die ein bestimmtes Bild erschaffen möchte. Dieses Bild wurde mit den einzelnen Blöcken (jeweils 16x16 Pixel ein Block) hochgeladen. Jedoch wollte ich nicht meine ganze Abende damit verbringen, Blöcke zu platzieren und pro Block 20 Sekunden nichts zu machen.

So entschied ich mich einen Bot/Mod (was nicht erlaubt ist) zu programmieren, welcher das Bild analysiert und die einzelnen Blöcke mit den Minecraft-Texturen vergleicht, um den Block zu erhalten, welcher an die jeweilige Position (wo der Bot gerade steht) platziert werden muss. Der Bot läuft dann also im Spiel jeden Block ab und schaut, ob es schon der richtige ist und, wenn nicht, dann platziert er den richtigen. Somit brauchte ich nicht anwesend zu sein, um das Bild zu vervollständigen. Nach knapp über 500 Blöcken wurde ich dann (zurecht permanent) gebannt.

Nichtsdestotrotz habe ich von vielen (Nicht-Programmierern) gehört, dass sie das schon sehr beeindruckend finden, was ich da programmiert habe (hat "nur" 3 lange Nächte gedauert, den Mod zu programmieren, aber noch kürzer, wenn ich nicht so RELATIV perfektionistisch wäre; dafür ist der Code aber auch Quick and Dirty).

Was meint ihr? Ist das eine starke Leistung meinerseits oder hätte das jeder machen können? Für mich war es ein schönes Kurzprojekt, um einen Sinn meines Hobbys zu erkennen

Beeindruckend 85%
Ich hasse Sie aus vielerlei Hinsicht 15%
Nicht beeindruckend 0%
Server, Mods, Programmierer, programmieren, Java, Minecraft, Minecraft Mods, Minecraft Server, fabric, Minecraft Java Edition, Fabric Mod
Ich möchte zur Übung gerne ein Java Programm erstellen, welches einen Screenshot von einem Bildschirmbereich macht und dann ein Klick auf dem Bildschirm macht?

Das Programm soll dann nach dem Klick einen weiteren Screenshot machen und diesem auf einem zuvor festlegbaren Dateipfad speichern, wobei er die Screenshots hochnummerieren soll. Der Punkt und der Bildschirmbereich sollen ebenfalls festlegbar sein. Gestartet werden soll das ganze durch Klicken eines Startbuttons. Ich bekomme bei meinem bisherigen Code folgende Fehlermeldung:

java.io.FileNotFoundException: F:\Screenshots\screenshot_1.png (Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung ist falsch)
   at java.base/java.io.RandomAccessFile.open0(Native Method)
   at java.base/java.io.RandomAccessFile.open(RandomAccessFile.java:347)
   at java.base/java.io.RandomAccessFile.<init>(RandomAccessFile.java:261)
   at java.base/java.io.RandomAccessFile.<init>(RandomAccessFile.java:216)
   at java.desktop/javax.imageio.stream.FileImageOutputStream.<init>(FileImageOutputStream.java:69)
   at java.desktop/com.sun.imageio.spi.FileImageOutputStreamSpi.createOutputStreamInstance(FileImageOutputStreamSpi.java:55)
   at java.desktop/javax.imageio.ImageIO.createImageOutputStream(ImageIO.java:419)
   at java.desktop/javax.imageio.ImageIO.write(ImageIO.java:1549)
   at Package.Screenshots$3$1.run(Screenshots.java:173)
   at java.base/java.lang.Thread.run(Thread.java:830)
javax.imageio.IIOException: Can't create an ImageOutputStream!
   at java.desktop/javax.imageio.ImageIO.write(ImageIO.java:1551)
   at Package.Screenshots$3$1.run(Screenshots.java:173)
   at java.base/java.lang.Thread.run(Thread.java:830)

finde aber einfach nicht den Fehler. Desweiteren würde ich gerne abändern, das ich beim Bildschirmbereich und -punkt nicht jedes Mal eine graue Fläche sehe, sondern immer noch den normalen Bildschirm mit allen offnen Fenstern, nur das es durchsichtig ist und ich nicht irgendetwas andere anklicke /auswähle/markiere.

Bisher habe ich folgenden Code:

https://pastebin.com/0P3QRzm7

programmieren, Java

Meistgelesene Beiträge zum Thema Java