代码如下:
aa类
package com.MahBonnets.Game;
import javax.swing.*;
public class aa {
public static ab f = new ab();
public static int width = 600;
public static int height = 400;
public static void main(String args[]) {
f.setSize(width, height);
f.setResizable(false);
f.setVisible(true);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setTitle("MAH BONNETS IS GONE");
f.setLocationRelativeTo(null);
System.out.println("Running!!");
}
}
ab
package com.MahBonnets.Game;
import java.awt.GridLayout;
import javax.swing.*;
public class ab extends JFrame {
public ac panel;
public ab() {
panel = new ac(this);
setLayout(new GridLayout (1, 1, 0, 0));
add(panel);
}
}
还有交流
package com.MahBonnets.Game;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Rectangle;
import javax.swing.*;
public class ac extends JPanel implements Runnable {
public Rectangle floor;
public int floorheight = 80;
public int fps = 1000;
public boolean objectDefine = false;
public Thread game;
public ac(ab f) {
setBackground(Color.black);
defineObjects();
game = new Thread(this);
game.start(); }
void defineObjects() {
floor = new Rectangle(-10, aa.height-floorheight, aa.width+10, floorheight);
objectDefine = true;
repaint();
}
public void paint(Graphics g) {
super.paint(g);
if(objectDefine) {
g.setColor(Color.RED);
g.fillRect(floor.x, floor.y, floor.width, floor.height);
}
}
public void fpsSetter() {
try{
Thread.sleep(fps/1000);
}catch(Exception e) {
e.printStackTrace();
}
}
@Override
public void run(){
// TODO Auto-generated method stub
}
}
应该发生的事情却没有发生,那就是 JFrame 底部应该出现一个红色矩形。我对编程完全陌生,但我已经查看了与矩形相关的代码部分,一切看起来都按顺序......至少......据我所知。
如果您知道出了什么问题,请帮助我。谢谢。
这是我一直在关注的 YouTube 教程 http://www.youtube.com/watch?v=0lfhcKAIr-8
最佳答案
- 不要依赖神奇的数字...
- 不要依赖可能与实际不符的参数(
public static int width = 600
不会与子组件的大小相同)。使用getWidth
和getHeight
获取组件的实际大小... - 摆脱
defineObjects
并依赖组件的实际已知状态 - 摆脱
paint
方法并使用paintComponent
代替 静态
并不总是你的 friend- 请勿使用 YouTube 作为引用,除非海报有引用;)
- 请阅读 Performing Custom Painting
- 请阅读 Painting in AWT and Swing
- 请阅读 Concurrency in Swing
将您的 paint
方法替换为类似这样的方法...
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g); //To change body of generated methods, choose Tools | Templates.
int x = -10;
int y = getHeight() - floorheight;
int width = getWidth() + 10;
int height = floorheight;
floor = new Rectangle(x, y, width, height);
g.setColor(Color.RED);
g.fillRect(floor.x, floor.y, floor.width, floor.height);
}
并且 Thread.sleep(1000/1000)
几乎没有 sleep ,没有区别;) - 25fps 大约为 40 毫秒;)
关于java - 框架中应有红色矩形,但什么也看不到,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16392094/