所以我正在编写一个小游戏,当我尝试将 JLabel 设置为 x = 0 和 y = 0它出现在JFrame的中间。这是我添加时的代码
for (int i = 0; i < btns.size(); i++){
Button btn = btns.get(i);
if (!components.contains(btn.getJLabel())){
frame.add(btn.getJLabel());
components.add(btn.getJLabel());
}
if (!btn.getJLabel().isVisible()) btn.getJLabel().setVisible(true);
btn.getJLabel().setText(btn.getText());
}
我还在其中放了一个鼠标侦听器,这样当鼠标越过按钮时它会变成红色,但是当我将鼠标悬停在 JFrame 上时它会变成红色
label.addMouseListener(new MouseListener(){
@Override
public void mouseClicked(MouseEvent e) {
onClick();
}
@Override
public void mouseEntered(MouseEvent e) {
Hover();
}
@Override
public void mouseExited(MouseEvent e) {
out();
}
@Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
}});
}
public void Hover(){
label.setForeground(Color.RED);
}
public void out(){
label.setForeground(Color.BLACK);
}
以下是主类的完整代码: ` 公共静态JFrame框架;
public static double VERSION = 1.0;
public static int WIDTH = 800, HEIGHT = 700;
public static boolean editorMode = false;
public static boolean selectedTower = false;
public static boolean running = false;
public static boolean mouseOver = false;
public static Tower editorTower = null;
public static Tower selectTower = null;
public static ArrayList<Button> btns;
public static ArrayList<Tower> towers;
public static ArrayList<Component> components;
public static void main(String[] args) {
frame = new JFrame();
frame.setTitle("MyLittleGame v"+VERSION);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(WIDTH, HEIGHT);
frame.setVisible(true);
frame.setResizable(false);
frame.setLocationRelativeTo(null);
frame.addMouseListener(new MouseListener(){
@Override
public void mouseClicked(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mouseEntered(MouseEvent arg0) {
mouseOver = true;
}
@Override
public void mouseExited(MouseEvent arg0) {
mouseOver = false;
}
@Override
public void mousePressed(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mouseReleased(MouseEvent arg0) {
// TODO Auto-generated method stub
}});
btns = new ArrayList<Button>();
towers = new ArrayList<Tower>();
components = new ArrayList<Component>();
registerBtns();
running = true;
startGameLoop();
}
public static void registerBtns(){
btns.add(new NewTowerBtn());
}
private static void startGameLoop(){
new Thread(new Runnable(){
@Override
public void run() {
int towerAdding = 0;
while (running){
int mouseX = 10;
int mouseY = 10;
if (mouseOver){
mouseX = (int) frame.getMousePosition().getX();
mouseY = (int) frame.getMousePosition().getY();
}
if (editorMode && editorTower != null){
editorTower.setXloc(mouseX);
editorTower.setYloc(mouseY);
}
for (int i = 0; i < towers.size(); i++){
Tower tower = towers.get(i);
if (!components.contains(tower.getLabel())){
frame.add(tower.getLabel());
components.add(tower.getLabel());
}
if (towerAdding >= 100) tower.grow();
if (!tower.getLabel().isVisible()) tower.getLabel().setVisible(true);
tower.getLabel().setText(tower.getWholeString());
}
for (int i = 0; i < btns.size(); i++){
Button btn = btns.get(i);
if (!components.contains(btn.getJLabel())){
frame.add(btn.getJLabel());
components.add(btn.getJLabel());
}
if (!btn.getJLabel().isVisible()) btn.getJLabel().setVisible(true);
btn.getJLabel().setText(btn.getText());
}
if (towerAdding >= 100) towerAdding = 0;
towerAdding++;
System.out.println("Went through");
}
}}).start();
}`
另外,当我试图添加一个位置为 x = 0 和 y = 0 的普通 JLabel 时,它也把它放在中间?谢谢。
正如 arcy 所说,如果你尝试使用绝对定位,你必须将框架的布局更改为 null
frame.setLayout(null);
您还可以在此处查看如何使用其他布局管理器。