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
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 zu Frage
programmieren, Java, Eclipse, Programmiersprache, Swing, Java Swing
Java Ellipse aus Linien zeichnen - Fehler wegen nur ganzzahlig möglichen Winkeln?

Hallo,

ich möchte in Java einen Farbkreis in Form eines Ellipse zeichnen; dafür zeichne ich Linien verschiedener Farben vom Mittelpunkt aus in einem bestimmten Winkel zum Endpunkt, der auf der imaginären Form einer Ellipse liegt. So weit so gut, das funktioniert auch.

Mein Problem allerdings ist, dass die Farbkreis-Ellipse nach dem Zeichnen ganz und gar nicht so aussieht, wie sie aussehen sollte:

Ich vermute, dass es daran liegt, dass die Berechnungen Gleitkommazahlen ergeben, die ich aber ganzzahlig runden muss, damit ich damit das Ende einer Linie als Punkt kennzeichnen kann. Dadurch liegen die Linien womöglich an manchen Stellen aufeinander und an anderen Stellen existieren keine Linien (ist das so?).

Hier der Code zum Definieren der Linien mit Farbe und Index:

Line[] lines = new Line[3*255]; 
int[] color = {255,0,0}; 
for(int i=0; i<3; i++) 
   for(int j=0; j<255; j++){ 
      color[i]--; color[(i+1)%3]++; 
      lines[i*255 + j] = new Line(i*255 + j + 1, new Color(color[0], color[1], color[2])); 
} 

Zeichne ich die Linien mit aufsteigender Länge nebeneinander, funktioniert der Farbübergang so wie geplant - nur die Farbellipse macht Probleme.

Hier der Konstruktor der Line-Klasse (mehr enthält sie mom. noch nicht):

Line(int index, Color color){
	this.index = index;
	this.color = color;
	this.angle = this.index*360./765; //3*255 Farben
    int a = Ellipse.a, b = Ellipse.b;
    double x = (a*b/Math.sqrt(b*b+Math.pow(a*Math.tan(angle), 2))),
           y = x*Math.tan(angle);
    if(angle > 90 && angle < 270) x = -x;
    this.end = new Point((int) x, (int) y);
    this.length = Point.distance(0, 0, end.x, end.y);
}

Die paint-Methode der Frame Klasse (ja, ich programmiere in Swing, die Ellipse ist eher ein quick&dirty-Projekt):

@Override public void paint(Graphics g){
	for(int i=0; i<3*255; i++){ 
       g.setColor(lines[i].color); 
       g.drawLine(m.x, m.y, lines[i].end.x+m.x, lines[i].end.y+m.y); 
    } 
} 

Warum sieht die gezeichnete Ellipse so grausam im Gegensatz zum Dreieck aus und separiert optisch so stark zwischen rot und blau? Woran liegt das bzw. wie kann ich es beheben?

Vielen Dank schon mal im Voraus.

LG

Bild zu Frage
Computer, Mathematik, zeichnen, programmieren, Java, Swing, Ellipse
Erzählende Rock, Metal & Alternative Lieder?

Ich bin mal wieder auf der Suche nach Musik, wie immer Dinge, die man nicht so leicht finden kann.

Dieses mal suche ich Wave & Gothic, Rock- und Metaltiteln, die eine Geschichte erzählen und dabei musikalisch (Melodie und Instrumente), textlich und am besten auch Soundeffektmäßig die Geschichte hörbar machen (so wie bei Empire of the Clouds von Iron Maiden, da passen die Instrumente, Melodie und Text zur Geschichte des Luftschiffs, nur die Geräusche fehlen). Dementsprechend muss das Lied vor allem atmosphärisch sein. Dabei darf jedes Subgenre und Crossover bedient werden. Die Geschichte darf aus so ziemlich jedem Genre sein (Horror, Fantasy, Steampunk, Abenteuer, Science-Fiction und und und).

Kurzum: ich suche sozusagen ein „Hörspiel“ in Liedform mit einem Text wie in einer Ballade (nicht Liedart sondern Gedichtform)

P.s.: Wenn ihr ansonsten absolut passende Lieder aus anderen Genre (egal welches) habt, dürft ihr sie gerne auch posten!

... Im Electro/Techno-basierten Bereich kann ich mir das auch gut vorstellen, dann aber weniger monoton und melodischer und mit mehr Text als in dem Genre, dafür aber mit vielen Effekten. Im Cyber und Sci-Fi Bereich stelle ich mir das sehr atmosphärisch vor....

Musik, Rock, Song, Liedsuche, Techno, Pop, Lied, Film, Celtic, Hip-Hop, Emo, Horror, Rap, Alternative, Unterhaltung, Titel, Metal, Schlager, Fantasy, Abenteuer, Audiobook, Band, Blues, Folk, Gedicht, Gothic, Grufti, Hippie, Hörbuch, Hörspiel, Indie, Jazz, Klassik, Literatur, Lyrik, Mittelalter, mukke, Punk, Punkrock, Rocker, Schwarze Szene, Science-Fiction, Steampunk, Subkultur, Swing, Volksmusik, Wave, biker, Metalhead, Neue Deutsche Härte, Post Punk, SynthPop
Suche Song 40er - 60er, Swing, Rock'n'Roll oder ähnliches?

Hallo Allerseits,

heute habe ich die ganze Zeit schon einen Ohrwurm und weiß nicht, wie das Lied heißt. Es ist rein von der Stimmung her sehr fröhlich und man hört eine absteigende Tonfolge aus sieben Tönen, der achte geht dann wieder etwas höher und dann wiederholt sich das Ganze. Ich weiß nicht einmal, ob in dem Lied gesungen wird oder nicht. Vielleicht ist es rein instrumental.

edit: Ich habe die Melodie nun gepfiffen und auf soundcloud hochgeladen. Wer möchte, kann sich das dort anhören. Vorsicht: Mein Gepfeife klingt ziemlich hoch und schrill. Vielleicht die Lautstärke vorher ein bisschen runterdrehen. Ein Ton klingt ziemlich schief, deswegen habe ich versucht, die Melodie noch zweimal zu wiederholen und hoffe nun, dass es einigermaßen erkennbar ist. Hier der Link:

https://on.soundcloud.com/Zknks

Im Grunde genommen ist es, wenn ich das richtig erkannt habe, einfach die Tonleiter rückwärts von C nach D und dann drei Töne höher, also G und dann das Selbe wieder von vorne.

Zeitlich würde ich es zwischen die 40er und 60er einordnen. Wahrscheinlich nicht älter und wahrscheinlich auch nicht neuer. Das Instrument, das die absteigende Tonfolge spielt, ist vermutlich ein Bass. Kontrabass unter Umständen, sicher bin ich mir dabei jedoch nicht. Vom Tempo her ist es mittelmäßig. Nicht langsam, aber auch nicht schnell.

Es kann genretechnisch in die Swing-Ära passen, vielleicht aber auch Rock'n'Roll oder eine andere Musikrichtung aus dieser Zeit.

Es ist verhältnismäßig bekannt und die Melodie ist vielleicht nur die Hintergrundmelodie zu der sich dann eine Hauptmelodie mit oder ohne Gesang gesellt, aber auch da bin ich mir nicht sicher.

Ich weiß, dass das sehr wenige Informationen sind, aber möglicherweise hat jemand von Euch ja eine Idee. Ich habe bereits in die google-Musikerkennungsapp gesummt und gepfiffen, aber es wurde nicht erkannt. Auch habe ich die Melodie auf mein Smartphone aufgenommen und wollte die Sounddatei auf den Computer übertragen, allerdings hat mein Phone wohl gerade einen Wackelkontakt und wird vom Computer nicht erkannt. Ein Mikrophon an meinem Computer habe ich derzeit leider auch nicht.

Nennt gerne alles, was Euch dazu einfällt. Also eine absteigende Tonfolge mit sieben Noten, danach wieder eine etwas höhere Note und dann wiederholt sich das Ganze. Ich entschuldige mich für die wenigen Daten und freue mich auf Eure Antworten und bedanke mich schon mal im Voraus.

Grüße

Geronimobosch

Musik, Song, Lied, 50er, Jazz, Rock 'n' Roll, Swing, 1960er, 40er
JPanels erst sichtbar, wenn man mit Maus drüberhovert?

Hallo, ich habe folgendes Problem:

Ich habe ein JFrame, in dem ein JPanel ist, in welchem wiederum dann ein zewidimensionales Array von JPanels ist. Das Problem ist, dass die JPanels in dem Array erst sichtbar werden, wenn man mit der Maus drüberhovert.

Das Komische daran ist, dass das plötzlich passiert ist. Ich habe die ganze Zeit an dem Projekt gearbeitet und dann hat es auf einmal nicht mehr geklappt. Ich habe auch schon versucht, alles außer den Konstruktor zu löschen. Den Background rauszunehmen bringt auch nichts.

PS. Das Array besteht aus Objekten, die JPanel extenden (Also Objekt extends JPanel). Dachte, das ist nicht so wichtig.

Hier ist ein Codeschnipsel vom Konstruktor:

this.setSize(1504, 841);

this.setLayout(null);

mouseFollowingSlot.setBorder(Konstanten.blackBorder);

mouseFollowingSlot.setVisible(false);

this.add(mouseFollowingSlot);

slotPanel = new JPanel();

slotPanel.setBounds(10, 100, 1484, 731);

slotPanel.setOpaque(false);

// slotPanel.setLayout(new GridLayout(4, 10, 5, 34));

slotPanel.setLayout(null);

this.add(slotPanel);

for (int y = 0; y < 4; y++) {

for (int x = 0; x < 10; x++) {

inventoryslots[x][y] = new InventorySlot();

inventoryslots[x][y].setBounds((4 + (x * 148)), (94 + (y * 148)), inventoryslots[x][y].getWidth(),

inventoryslots[x][y].getHeight());

slotPanel.add(inventoryslots[x][y]);

inventoryslots[x][y].setName("binvslo" + x + "," + y);

// inventoryslots[x][y].addMouseListener(il);

}

}


for (int i = 0; i < inventoryButtons.length; i++) {

inventoryButtons[i] = new JLabel(new ImageIcon("res/textures/inventory/menubutton" + i + ".png"));

inventoryButtons[i].setBounds(14 + i * 148, 59, 144, 131);

inventoryButtons[i].setName("binvmen" + i);

inventoryButtons[i].addMouseListener(il);

this.add(inventoryButtons[i]);

}

background = new JLabel(new ImageIcon("res/textures/inventory/background.png"));

background.setBounds(0, 0, 1504, 841);

this.add(background);

itemInHand = false;

setMouseFollowingTimer();

}
Java, Bug, 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