gpt4 book ai didi

java - 绝对定位 JButton

转载 作者:行者123 更新时间:2023-12-01 15:22:39 25 4
gpt4 key购买 nike

我试图用空布局定位 JButton,但它不会显示,如果我切换到网格布局,无论我更改什么,它们都只会在中间排列。如何设置按钮的位置和大小?

内框

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();
}

}

在启动器中

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);
}
}

最佳答案

子容器不会继承其父容器的 LayoutManager,因此在 Launcher 的构造函数中我建议:

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();
}

编辑:LayoutManager 布局其组件,但不布局组件内部的内容。这就是为什么仅仅设置框架的布局是不够的。

关于java - 绝对定位 JButton,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10671607/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com