Home > database >  Why buttons getting placed two times? (Swing)
Why buttons getting placed two times? (Swing)

Time:08-26

AppUI.java

package Void2DEditor.EditorUI;

import javax.swing.JFrame;

import javax.swing.ImageIcon;

import javax.swing.JButton;

import java.awt.Container;

import java.io.File;

public class AppUI {
    private final JFrame window;

    private final Container windowContent;

    private final JButton[] engineParts = {
        new JButton("Square."),
        new JButton("Circle."),
        new JButton("Triangle."),
        new JButton("Shadows."),
        new JButton("Sprite."),
        new JButton("Keyboard.")
    };

    private final int[] enginePartsButtonsPositions = {5, 5};

    private final int[] enginePartsButtonsSize = {50, 50};

    public AppUI() {
        window = new JFrame(AppUIProperties.windowTitle);

        windowContent = window.getContentPane();

        window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        window.setBounds(
            AppUIProperties.windowPosition[0],
            AppUIProperties.windowPosition[1],

            AppUIProperties.windowSize[0],
            AppUIProperties.windowSize[1]
        );

        window.setResizable(AppUIProperties.windowResizable);
    }

    public void setupCustomUIProperties() {
        window.setIconImage(new ImageIcon(new File(CustomAppUIProperties.windowIcon).getAbsolutePath()).getImage());

        windowContent.setBackground(CustomAppUIProperties.windowBackground);
        windowContent.setForeground(CustomAppUIProperties.windowForeground);
    }

    public void placeEnginePartsButtons() {
        for(int enginePart=0; enginePart < engineParts.length; enginePart  ) {
            JButton enginePartObject = engineParts[enginePart];

            enginePartObject.setLocation(enginePartsButtonsPositions[0], (enginePartsButtonsPositions[1] * (10 * enginePart)));
            enginePartObject.setSize(enginePartsButtonsSize[0], enginePartsButtonsSize[1]);
            enginePartObject.addActionListener((event) -> {System.out.println(enginePartObject.getText());});

            window.add(enginePartObject);
        }
    }

    public void runAppUI() {
        window.setVisible(AppUIProperties.windowVisible);
    }
}

Editor.java

package Void2DEditor;

import Void2DEditor.EditorUI.AppUI;

public class Editor {
    public static void main(String[] args) {
        AppUI editorUI = new AppUI();

        editorUI.setupCustomUIProperties();

        editorUI.placeEnginePartsButtons();

        editorUI.runAppUI();
    }
}

Result: result

Why does it behave like this?ㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤ ㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤ

CodePudding user response:

You should not set layout to null, it will bring you problems.

I know very little what you want to achive but I would suggest:

  public void placeEnginePartsButtons()
  {
    window.setLayout(new BoxLayout(window.getContentPane(), BoxLayout.Y_AXIS));
    for (int enginePart = 0; enginePart < engineParts.length; enginePart  )
    {
      JButton enginePartObject = engineParts[enginePart];
      enginePartObject.addActionListener((event) ->
      {
        System.out.println(enginePartObject.getText());
      });
      window.add(enginePartObject);
    }
  }

CodePudding user response:

window.setLayout(null);

Window layout wasn't null, so it must be. Solved.

  • Related