visual vertical uiswing tutorial manager layouts javase docs java layout null jframe jbutton

java - vertical - Posicionamiento absoluto de un JButton



manager layout java (2)

Estoy tratando de colocar un JButton con un diseño nulo, pero no se mostrará, si cambio a gridlayout, solo se alinean en el medio, sin importar lo que cambie. ¿Cómo puedo establecer la posición y el tamaño de mi botón?

En el marco de

package Run; import javax.swing.*; import ThreeD.Display; import ThreeD.Launcher; import TowerDefence.Window; import java.awt.*; import java.awt.image.BufferedImage; public class Frame extends JFrame{ public static String title = "Game"; /*public static int GetScreenWorkingWidth() { return java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment().getMaximumWindowBounds().width; }*/ /*public static int GetScreenWorkingHeight() { return java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment().getMaximumWindowBounds().height; }*/ //public static Dimension size = new Dimension(GetScreenWorkingWidth(), GetScreenWorkingHeight()); public static Dimension size = new Dimension(1280, 774); public static void main(String args[]) { Frame frame = new Frame(); System.out.println("Width of the Frame Size is "+size.width+" pixels"); System.out.println("Height of the Frame Size is "+size.height+" pixels"); } public Frame() { setTitle(title); setSize(size); setResizable(false); setLocationRelativeTo(null); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); ThreeDLauncher(); } public void ThreeDLauncher() { //setLayout(new GridLayout(1, 1, 0, 0)); setLayout(null); Launcher launcher = new Launcher(); add(launcher); setVisible(true); } public void TowerDefence() { setLayout(new GridLayout(1, 1, 0, 0)); Window window = new Window(this); add(window); setVisible(true); } public void ThreeD() { BufferedImage cursor = new BufferedImage(16, 16, BufferedImage.TYPE_INT_ARGB); Cursor blank = Toolkit.getDefaultToolkit().createCustomCursor(cursor, new Point(0, 0), "blank"); getContentPane().setCursor(blank); Display display = new Display(); add(display); setVisible(true); display.start(); } }

En Launcher

package ThreeD; import java.awt.Rectangle; import javax.swing.JButton; import javax.swing.JPanel; import javax.swing.UIManager; public class Launcher extends JPanel{ private JButton play, options, help, mainMenu; private Rectangle rplay, roptions, rhelp, rmainMenu; public Launcher() { drawButtons(); } private void drawButtons() { try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch(Exception e) { e.printStackTrace(); } play = new JButton("Play"); options = new JButton("Options"); help = new JButton("Help"); mainMenu = new JButton("Main Menu"); rplay = new Rectangle(20, 50, 80, 40); roptions = new Rectangle(20, 50, 80, 40); rhelp = new Rectangle(20, 50, 80, 40); rmainMenu = new Rectangle(20, 50, 80, 40); play.setBounds(rplay); options.setBounds(roptions); help.setBounds(rhelp); mainMenu.setBounds(rmainMenu); add(play); add(options); add(help); add(mainMenu); } }


Los contenedores secundarios no heredan el LayoutManager de sus padres, por lo que en el constructor de Launcher recomendaría:

public Launcher() { this.setLayout(null); //this.setLayout(new GroupLayout(2, 2)); // I strongly recommend you try this though and get rid of the setBounds and rects drawButtons(); }

Editar: LayoutManagers diseña sus componentes, pero no lo que está dentro de un componente. Es por eso que no es suficiente simplemente establecer el diseño del marco.


Supongo que no está configurando el tamaño o el diseño antes de agregar JPanel Launcher. Entonces, los botones se muestran bien, pero JPanel no. Intenta poner en:

launcher.setBounds( new Rectangle( 0, 0, 200, 200 ) );

o de cualquier tamaño que necesites

Vea si eso funciona