【发布时间】:2017-01-01 17:02:59
【问题描述】:
我想在我的JPanel 中添加一个JLabel,但它不会将它定位在我想要的位置。我将我的 layoutManager 设置为 null 并且没有用。
我正在尝试将JLabel 放在JFrame 的左下角。窗口的KeyListener 是为了让我可以使用退出键关闭窗口。
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class Window extends Canvas {
private static final long serialVersionUID = 1L;
public Window(int width, int height, String title, Game game) {
// Start: Code For Window Elements
// Create Font That Is Used In Elements
Font font = new Font("SansSerif", Font.PLAIN, 12);
// JLabel For Author And Game Name
JLabel name = new JLabel();
name.setVisible(true);
name.setText("\"Cube\" By: Toxicminibro");
name.setFont(font);
name.setForeground(Color.white);
name.setBounds(0, 0, width, height);
name.setLocation(5, 0);
// End: Code For Window Elements
// Create The JPanel, Set Its Attributes, And Add Elements To JPanel
JPanel panel = new JPanel();
panel.setVisible(true);
panel.setLayout(null);
panel.setBounds(0, 0, width, height);
panel.setBackground(Color.DARK_GRAY);
panel.add(name);
panel.validate();
// Create The Window And Set Its Attributes
JFrame frame = new JFrame(title);
frame.setVisible(true);
frame.setResizable(false);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setPreferredSize(new Dimension(width, height));
frame.setMaximumSize(new Dimension(width, height));
frame.setMinimumSize(new Dimension(width, height));
frame.setLayout(null);
frame.validate();
frame.add(panel);
frame.pack();
// Window KeyListener
KeyAdapter listener = new KeyAdapter() {
@Override public void keyPressed(KeyEvent e) {
if(e.getKeyCode() == KeyEvent.VK_ESCAPE) {
frame.dispose();
}
}
};
frame.addKeyListener(listener);
}
}
【问题讨论】:
-
panel.setLayout(null);通过将其添加到您的代码中,您声明:“摆脱所有如何在 GUI 中放置和组织元素的东西,我是终极大师并且比任何人都清楚!”。由于这很少是真的,我建议通过公共教程了解 LayoutMangers 以及如何使用它们:docs.oracle.com/javase/tutorial/uiswing -
您的代码有许多问题表明您没有充分利用 Swing,包括使用
null布局、在首选键绑定的情况下使用 KeyListener、混合 Swing 和 AWT (Canvas)组件,...请考虑通过 Swing 教程来学习如何更好地使用这个库。这样做不会输。