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
Pygame Vampire Survivors?

Hallo ich programmiere gerade ein Spiel in Pygame das dem Spiel Vampire Survivors ähnelt ich habe aktuell das problem das Problem das wenn der spieler auf die Gegner hinzu läuft die Gegener nach hinten verschoben werden staat nach vorn weil.

Also aktuell wenn ich stehe laufen die Gegner auf mich zu.

Und wenn ich von den Gegnern weg laufe werden sie aus dem Screen geschoben.

Aber wenn ich auf sie zu laufe werden sie auch aus dem Screen geschoben.

Obwohl sie dann normal laufen sollen als ob der spieler steth hier der wichtige code:   def update(self, dt, player, screen_width, screen_height):

    if not self.collided_with_enemy and self.is_visible:

      dx = player.x - self.x

      dy = player.y - self.y

      distance = max(1, pygame.math.Vector2(dx, dy).length())

      direction = pygame.math.Vector2(-dx / distance, -dy / distance)

      player_rect = pygame.Rect(player.x, player.y, player.hitbox_width, player.hitbox_height)

      enemy_rect = pygame.Rect(self.x, self.y, self.hitbox_width, self.hitbox_height)

      if player_rect.colliderect(enemy_rect):

        player.handle_collision()

        self.speed = 0

        return

      if dx != 0 and dy != 0:

        dx = 0

        dy = 0

      speed_multiplier = self.speed * dt

      if player.is_moving:

        speed_multiplier *= 0.5

      # Anpassung der Bewegungsrichtung basierend auf dem Spielerstatus

      if player.is_moving:

        self.x -= direction.x * speed_multiplier

        self.y -= direction.y * speed_multiplier

      else:

        self.x += direction.x * speed_multiplier

        self.y += direction.y * speed_multiplier

      self.x = max(-self.hitbox_width, min(self.x, screen_width))

      self.y = max(-self.hitbox_height, min(self.y, screen_height))

      self.animation_timer += dt

      if self.animation_timer >= self.animation_speed:

        self.animation_timer = 0

        self.current_frame = (self.current_frame + 1) % self.animation_frames

      # Anpassung der Geschwindigkeit basierend auf der Bewegungsrichtung des Spielers

      player_direction = pygame.math.Vector2(player.x - self.x, player.y - self.y)

      player_distance = max(1, player_direction.length())

      player_direction = player_direction.normalize()

      dot_product = player_direction.dot(direction)

      if dot_product > 0.5:

        # Spieler bewegt sich dem Gegner entgegen

        self.speed = self.original_speed + 100

      else:

        # Spieler bewegt sich vom Gegner weg

        self.speed = self.original_speed - 100

    else:

      self.x += self.direction * self.speed * dt

      self.collided_with_enemy = False

    for enemy in enemies:

      if check_enemy_collision(player, enemy):

        break

Java, JavaScript, Minecraft, C Sharp, Programmiersprache, Python, Python 3, Unity, Pygame
Als Student Online Geld verdienen (Programmieren)?

Hallo,

Da ich noch Student bin und nicht sehr viel Geld habe, bin ich auf der Suche nach Jobs (Freelancing). Mein Ziel ist es um die 1200-2000 Fr. zu verdienen, da ich mir ein MacBook kaufen möchte, aber ich weiss nicht genau wie ich das anstellen soll. In meiner Freizeit programmiere ich sehr gerne und interessiere mich generell sehr gerne für die IT. Ich kenne mich schon mit Java, SQL, Python, C++, Javascript aus und ich bin auch recht gut darin.

Mein einziges Problem darin ist, dass ich nicht weiss, wie ich etwas verkaufen soll, damit ich irgendwie an das gewünschte Geld komme. Was ich sehr gut kann, ist das, was in einer App im Hintergrund passiert. Also das Logische hinter einer App. Was ich aber wiederum noch nicht sehr gut kann, ist das Designen einer App, damit es benutzerfreundlich ist und damit man die auch verwenden kann. Ich kann ja keine App verkaufen, ohne das entsprechende Design. Ich habe auch vor das mit Flutter zu lernen, aber bis dahin geht es mir ein bisschen zu lange.

Was ich auch noch sehr gut kann, ist Datenbanken erstellen, Queries, ERM, Schema usw. Ich kann diese auch dann mit der dementsprechenden Software verknüpfen.

Ich habe bisher keine Option gefunden, mit diesem Wissen irgendwelches Geld zu verdienen. Natürlich kenne ich auch Plattformen wie FIverr, aber ich habe das Gefühl da ich da keinen Gewinn erzielen werde, denn wenn ich z.B. anbiete eine WordPress Homepage zu machen, dann gibt es schon 50 andere die schon mehr Erfahrung haben als ich und auch schon 5-Sterne-Bewertungen haben und warum sollten dann Kunden bei mir einkaufen, wenn es andere gibt, wo es besser ausschaut.

Mein Ziel ist es ja nicht etwas langzeitiges zu finden, sondern ich möchte eigentlich nur an den gewünschten Betrag zu kommen, und das auch möglichst schnell.

Vielleicht habt ihr ein paar Tipps, wie ich an mein Ziel näher kommen könnte.
PS: Mir wäre es auch egal, müsste ich dafür eine neue Programmiersprache lernen.

Ich hoffe, jemand kann mir irgendwie helfen
Danke im Voraus!

LG
Simone

Geld verdienen, Job, Nebenjob, SQL, Java, JavaScript, Minijob, pro, Taschengeld
Pinball-Game / JavaScript: Wie kann ich die Kollisionserkennung implementieren?

Hallo zusammen,

ich muss für die Uni ein kleines Single Page 2D-Spiel entwickeln. Die Backend REST-API mit Python, das Frontend mit HTML/CSS, die Logik mit JavaScript. Die Animationen sollen wir selbst entwickeln und nicht z.B. von canvas-Objekten übernehmen.

Ich versuche zurzeit ein Pinball-Spiel (Flipper-Automaten) und habe das Grundgerüst mit CSS gebaut. Nur habe ich mir die Kollisionserkennung deutlich leichter vorgestellt, als sie wahrscheinlich ist.

So sieht das Spielfeld momentan aus:

Die JavaScript-Logik sodass der Ball im Spielfeld bleibt, ist ja recht simpel:

  var ball = document.getElementById('ball');
  var playArea = document.getElementById('play-area');
  var ballRadius = 10;
  var playAreaWidth = playArea.offsetWidth; // 600
  var playAreaHeight = playArea.offsetHeight; // 820
  var ballX = playAreaWidth / 2; // Startposition des Balls in der Mitte des Spielfelds
  var ballY = playAreaHeight / 2; // X = 300, Y = 410
  var ballSpeedX = 3; // Geschwindigkeit des Balls in horizontaler Richtung
  var ballSpeedY = 3; // Geschwindigkeit des Balls in vertikaler Richtung
  
  function updateBallPosition() {
    // Aktualisiere die Position des Balls basierend auf der aktuellen Geschwindigkeit
    ballX += ballSpeedX;
    ballY += ballSpeedY;
  
    if (ballX + ballRadius > playAreaWidth || ballX - ballRadius < 0) {
      ballSpeedX *= -1; // Richtungswechsel in der horizontalen Richtung
    }
  
    if (ballY + ballRadius > playAreaHeight || ballY - ballRadius < 0) {
      ballSpeedY *= -1; // Richtungswechsel in der vertikalen Richtung
    }
  
    // Setze die neue Position des Balls
    ball.style.left = ballX + 'px';
    ball.style.top = ballY + 'px';
  }
  
  // Aktualisiere die Position des Balls alle 16 Millisekunden (ca. 60 Frames pro Sekunde)
  setInterval(updateBallPosition, 16);
}

Aber wie man es implementiert, sodass der Ball von den Hindernissen und Banden richtig abprallt, sodass ein Richtungswechsel entsteht, habe ich noch nicht wirklich verstanden. Hätte da jemand eine Idee oder Erfahrung, wie man hier an die Kollisionserkennung herangehen könnte?

LG und danke im Voraus. :)

Bild zu Frage
HTML, CSS, Java, JavaScript, HTML5, Informatik, Programmiersprache, Webentwicklung
DoubleLinkedlist ist methode ineffizient?

hab mal selber eine methode zum hinten anfügen geschrieben

public void addBack(int data){
        Node n = new Node(data);
        if(rear == null){
            rear = n;
            front = n;
            return;
        }
        
        if( front.next == null){
            front.next = n;
            n.before = front;
            rear = n;
        }
        n.before = rear;
        rear = n;
        rear.before.next = rear;
        
    }

und das ist die musterFunktion, welche nachteile hat meine? bzw. wo gibt es fehler hab getestet, scheint alles zu funktionieren bei 1 maligen einfügen oder dann auch bei mehrmaligen einfügen

public void addAtEnd(int dataValue){
        if (front == null){
            addFront(dataValue);
            return;
        }
        Node lastNode = front;
        while (lastNode != null){
            if (lastNode.next == null){
                Node newNode = new Node(dataValue);
                newNode.next = null;
                newNode.before = lastNode;
                lastNode.next = newNode;
                lastNode.next = newNode;
                rear = newNode;
                return;
            }
            lastNode = lastNode.next;
        }
    }
Java, Programmiersprache
Eclipse fehler beim installieren?

hallo ich habe vor kurzem meinen pc upgegradet und alles neu installier inclusive windows 10...nur habe ich jetzt das problem dass ich mir Eclipse nicht merh herunterladen kann da ich die ganze zeit eine fehler meldung bekomme...kann mir jemand helfen???

Ende des Log files:
(ganz viele andere Dowlnloads...)

[2023-06-04 19:09:15] Downloading org.eclipse.mylyn.wikitext.asciidoc

[2023-06-04 19:09:15] Collected 467 artifacts for https://download.eclipse.org/releases/2023-03/202303151000 in 0.259s

[2023-06-04 19:09:15] An error was detected while performing the engine operation and the changes are being rolled back. See the log for details.

[2023-06-04 19:09:15] ERROR: org.eclipse.equinox.p2.engine code=4 An error occurred while collecting items to be installed

 at org.eclipse.oomph.util.OomphPlugin.coreException(OomphPlugin.java:296)

 at org.eclipse.oomph.p2.internal.core.ProfileTransactionImpl$3.commit(ProfileTransactionImpl.java:578)

 at org.eclipse.oomph.p2.internal.core.ProfileTransactionImpl.commit(ProfileTransactionImpl.java:359)

 at org.eclipse.oomph.setup.p2.impl.P2TaskImpl.perform(P2TaskImpl.java:904)

 at org.eclipse.oomph.setup.internal.core.SetupTaskPerformer.doPerformNeededSetupTasks(SetupTaskPerformer.java:3864)

 at org.eclipse.oomph.setup.internal.core.SetupTaskPerformer.performNeededSetupTasks(SetupTaskPerformer.java:3792)

 at org.eclipse.oomph.setup.internal.core.SetupTaskPerformer.performTriggeredSetupTasks(SetupTaskPerformer.java:3773)

 at org.eclipse.oomph.setup.internal.core.SetupTaskPerformer.perform(SetupTaskPerformer.java:3651)

 at org.eclipse.oomph.setup.internal.installer.SimpleVariablePage.installPerform(SimpleVariablePage.java:1353)

 at org.eclipse.oomph.setup.internal.installer.SimpleVariablePage$20.run(SimpleVariablePage.java:1165)

 ERROR: org.eclipse.equinox.p2.engine code=0 session context was:(profile=C__Users_Noni_eclipse_java-2023-03_eclipse, phase=org.eclipse.equinox.internal.p2.engine.phases.Collect, operand=, action=).

 ERROR: org.eclipse.equinox.p2.artifact.repository code=1003 Unable to write to repository: file:/C:/Users/Noni/Downloads/%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00.

 java.io.IOException: Failed to create directory C:\Users\Noni\Downloads\

Java, Eclipse, Softwareproblem, eclipse java
Wie kann ich bei Druck auf Button 3 eine Zahl ins Textfeld eintragen?

Hallo,

ich würde es gerne schaffen, dass, wenn ich Button3 drücke, dieser die 0 einträgt.

Hat jemand von euch eine Idee? Das war bisher mein Ansatz:

inputField.setText(Integer.toString(a));

a ist natürlich definiert in diesem Code:

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

public class CopyOfCopyOftextapp2 extends JFrame implements ActionListener {
  private JTextField inputField;
  private JTextArea outputArea;
  private JButton submitButton;
  private JButton submitButton2;
  private JButton submitButton3;

  public CopyOfCopyOftextapp2() {
    JLabel inputLabel = new JLabel("Bitte geben Sie eine Zahl ein:");
    inputField = new JTextField(10);
    submitButton = new JButton("Eingabe");
    submitButton.addActionListener(this);
    submitButton2= new JButton("Beenden");
    submitButton2.addActionListener(this);
    submitButton3= new JButton("0");
    submitButton3.addActionListener(this);
    outputArea = new JTextArea(100, 160);
    JScrollPane outputPane = new JScrollPane(outputArea);
    Container container = getContentPane();
    container.setLayout(new FlowLayout());
    container.add(inputLabel);
    container.add(inputField);
    container.add(submitButton);
    container.add(submitButton2);
    container.add(submitButton3);
    container.add(outputPane);

    setSize(Toolkit.getDefaultToolkit().getScreenSize());

    var subBox = new JPanel(new GridLayout(1, 2));
    subBox.add(new JLabel("2"));
    subBox.add(new JLabel("3"));
    var box = new JPanel(new GridLayout(2, 1));
    box.add(new JLabel("1"));
    box.add(subBox);

    GraphicsDevice device;
    device = GraphicsEnvironment.getLocalGraphicsEnvironment().getScreenDevices()[0];
    setUndecorated(true);
    device.setFullScreenWindow(this);
    setTitle("Text App");
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    pack();
    setVisible(true);
  }

  public static void main(String[] args) {
    CopyOfCopyOftextapp2 app = new CopyOfCopyOftextapp2();
  }

  public void actionPerformed(ActionEvent e) {
    // Neue Parameter hinzugefügt
    if (e.getSource() == this.submitButton) {
      int inputNumber = Integer.parseInt(inputField.getText());

      switch (inputNumber) {
        case 1:
          String text = "Sie haben die Zahl 1 eingegeben.";
          outputArea.setText(text);
          break;
        case 2:
          String text2 = "Sie haben die Zahl 2 eingegeben.";
          outputArea.setText(text2);
          break;
        default:
          String text3 = "Sie haben die falsche Zahl eingegeben.";
          outputArea.setText(text3);
      }
    }
    else if (e.getSource() == this.submitButton2) {
      int result = JOptionPane.showConfirmDialog(null, "Wollen sie das Programm wirklich beenden", "Programm beenden", JOptionPane.YES_NO_OPTION);

      switch (result) {
        case JOptionPane.YES_OPTION:
          System.exit(0);
        case JOptionPane.NO_OPTION:
      }

      if (e.getSource() == this.submitButton3) {}
    }
  }
}
Java, Programmiersprache
Buttons postion Anpassen java?

hallo, ich würde gerne buttons, die ich erzeugt habe in der Position ändern, wie mach ich das ?

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


public class CopyOftextapp2 extends JFrame implements ActionListener {

    private JTextField inputField;
    private JTextArea outputArea;
    private JButton submitButton;
    private JButton submitButton2;
 


    

    public CopyOftextapp2() {
        
       
        
      
        JLabel inputLabel = new JLabel("Bitte geben Sie eine Zahl ein:");
        inputField = new JTextField(10);
        
        submitButton = new JButton("Eingabe");
        submitButton.addActionListener(this);
        
        
         submitButton2= new JButton("Beenden");
         submitButton2.addActionListener(this);
         
   

         
        
        outputArea = new JTextArea(100, 160);
        JScrollPane outputPane = new JScrollPane(outputArea);
       

        Container container = getContentPane();
        container.setLayout(new FlowLayout());
        container.add(inputLabel);
        container.add(inputField);
        container.add(submitButton);
        container.add(submitButton2);
      

        container.add(outputPane);
        setSize( Toolkit.getDefaultToolkit().getScreenSize() );
        
        submitButton13.setBounds( 100, 100, 600, 250 );
        setBounds( 20, 20, 70, 100 );
        
        
        


       GraphicsDevice device;
             device=GraphicsEnvironment.getLocalGraphicsEnvironment().getScreenDevices()[0];
             setUndecorated( true );
             device.setFullScreenWindow(this);
 
        
       
        
        setTitle("Text App");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        pack();
        setVisible(true);
    }
 
 public static void main(String[] args) {
        CopyOftextapp2 app = new CopyOftextapp2();
    }
    public void actionPerformed(ActionEvent e) {
      // Neue Parameter hinzugefügt
      if(e.getSource() == this.submitButton){
        int inputNumber = Integer.parseInt(inputField.getText());
      
         switch ( inputNumber ) {
       
         case 1:
         String text = "Sie haben die Zahl 1 eingegeben.";
         outputArea.setText(text);
         break;
        
         case 2:
         String text2 = "Sie haben die Zahl 2 eingegeben.";
         outputArea.setText(text2);
         break;
        
         default:
         String text3 = "Sie haben die falsche Zahl eingegeben.";
         outputArea.setText(text3);
        
       }
   }
   else if(e.getSource() == this.submitButton2){
     

     int result = JOptionPane.showConfirmDialog(null,"Wollen sie das Programm wirklich beenden", "Programm beenden", JOptionPane.YES_NO_OPTION);
     switch(result){
     case JOptionPane.YES_OPTION:
     System.exit(0);
     case JOptionPane.NO_OPTION:


     }
   }
}
}
Java, Programmiersprache

Meistgelesene Fragen zum Thema Java