Я делаю кусок bounc * ing, который перемещается вокруг рамки. Чтобы обнаружить границу кадра, я использовал getHeight() и getWidth() из JComponent в JFrame и вычислил возможную границу, чтобы куб мог отскочить.Почему getHeight() не равен высоте кадра?
Он отлично подходит для getWidth(). Тем не менее, я не могу заставить его отскочить на границе для getHeight().
Когда cu * будет уходить в верхнюю часть окна, он продолжает двигаться примерно на 10 пикселей до отскока.
Вот скриншот этой проблемы.
Вот мой код:
public class Cube {
final public static int DIMENSION = 100;
private final static int D_X = 20;
private final static int D_Y = -20;
private final static int SPEED = 1;
private int xVelBK;
private int yVelBK;
private int xVel;
private int yVel;
private CubePoint[] pts;
public Cube(int x, int y){
xVel = SPEED;
yVel = SPEED;
pts = new CubePoint[8];
pts[0] = new CubePoint(x,y);
pts[1] = new CubePoint(x,y - DIMENSION);
pts[2] = new CubePoint(x + DIMENSION,y - DIMENSION);
pts[3] = new CubePoint(x + DIMENSION,y);
pts[4] = new CubePoint(x + D_X,y + D_Y);
pts[5] = new CubePoint(x + D_X,y + D_Y - DIMENSION);
pts[6] = new CubePoint(x + D_X + DIMENSION,y + D_Y - DIMENSION);
pts[7] = new CubePoint(x + D_X + DIMENSION,y + D_Y);
}
public void move(int componentWidth, int componentHeight){
......
//bug in here
if (pts[0].getY() - DIMENSION - D_Y <= 0) {
yVel = SPEED;
}
.......
}
..........
}
Вот компонент:
public class CubeComponent extends JComponent {
...........
private Cube cube;
private Timer timer;
private CubePoint originMousePos;
private CubePoint closest;
private Font font;
private int mode;
private int delay = DEFAULT_DELAY ;
private int mouseToClosestX;
private int mouseToClosestY;
class CubeMoveListener implements ActionListener{
@Override
public void actionPerformed(ActionEvent e){
cube.move(getWidth(),getHeight());
repaint();
}
}
@Override
public void paintComponent(Graphics g){
Graphics2D g2 = (Graphics2D)g;
cube.draw(g2);
}
}
Название окна включено в размер окна. Есть функция, которая сообщает вам размер «внутренней части» окна, но я не помню, как это называется прямо сейчас. (Кто-то еще может) – immibis
'public void paintComponent (Графика g) {..' должна быть' public void paintComponent (Graphics g) {super.paintComponent (g); ..' (в пятый раз сегодня). –
Возможный дубликат [JFrame: получение фактического размера содержимого] (http://stackoverflow.com/questions/7154633/jframe-getting-actual-content-size) – fdsa