我以前使用過jframes,從來沒有遇到過這個問題,但是當我設置緩衝策略的方式不同(我不完全理解,也可能是這個原因)時,我遇到了這個問題。每當我在我的jframe上輸出任何東西時,x座標完美地匹配jframe(最左邊的x像素是0,最右邊的x是框架本身的寬度),但是y不是。我使用了一個鼠標移動偵聽器來發現我的所有y輸出開始比幀高22個像素。例如:(Java)爲什麼我的JFrame y座標是22點?
如果我要繪製任何矩形,圖像或任何座標(0,0)......我的圖像的最頂部將被切斷22個像素。我不是java的專家,我認爲沒有其他人有這個問題證明,但似乎沒有這種情況發生,我已經在2臺不同的計算機上試過2個不同的IDE,看它是否我的機器。
我編輯我的代碼的批評/無助於問題的「核心」:
import java.awt.*;
import java.awt.event.*;
import java.awt.image.BufferStrategy;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
public class Mouse extends JFrame implements KeyListener, MouseListener, MouseMotionListener {
public static void main(String[] args) {
Mouse m = new Mouse();
m.run();
}
public void run(){
init();
while (this.isActive()){
repaint();
}
}
BufferStrategy strategy;
int mPosx;
int mPosy;
public void init(){
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setBounds(100,100,800,600);
this.setResizable(false);
this.addKeyListener(this);
this.addMouseListener(this);
this.addMouseMotionListener(this);
this.setIgnoreRepaint(true);
this.setVisible(true);
this.createBufferStrategy(2);
strategy = this.getBufferStrategy();
}
public void paint(Graphics g) {
Graphics2D g2 = null;
if (strategy != null) {
try {
g2 = (Graphics2D)strategy.getDrawGraphics();
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
draw(g2);
}
finally {
g2.dispose();
}
strategy.show();
}
}
public void draw(Graphics2D g){
g.setColor(Color.DARK_GRAY);
g.fillRect(580, 30, 120, 90);
g.setColor(Color.WHITE);
g.drawString("Mouse X: " + mPosx, 600, 70);
g.drawString("Mouse Y: " + mPosy, 600, 90);
}
public void keyPressed(KeyEvent e) {
switch (e.getKeyCode()){
case KeyEvent.VK_ESCAPE:
this.dispose();
break;
}
}
public void keyReleased(KeyEvent e) {}
public void keyTyped(KeyEvent e) {}
public void mouseClicked(MouseEvent e) {}
public void mouseEntered(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}
public void mousePressed(MouseEvent e) {}
public void mouseReleased(MouseEvent e) {
mPosx = e.getX();
mPosy = e.getY();
}
public void mouseDragged(MouseEvent e) {
}
public void mouseMoved(MouseEvent e) {
mPosx = e.getX();
mPosy = e.getY();
}
}
爲什麼我的y座標了嗎?有人可以更好地寫出這些代碼並使用正確的y嗎?
你的問題是回答?如果是這樣,你應該[接受答案](http://meta.stackexchange.com/a/5235)。 –