Java JOGL屏幕坐标已关闭
考虑到我从JOGAMP wiki上得到的这个简单示例,为什么鼠标坐标在y方向偏移40,在x方向偏移20?点击屏幕右下角显示坐标(620440),而不是我预期的坐标(640480) 谢谢你的帮助 节目如下:Java JOGL屏幕坐标已关闭,java,swing,awt,jogl,Java,Swing,Awt,Jogl,考虑到我从JOGAMP wiki上得到的这个简单示例,为什么鼠标坐标在y方向偏移40,在x方向偏移20?点击屏幕右下角显示坐标(620440),而不是我预期的坐标(640480) 谢谢你的帮助 节目如下: import javax.media.opengl.GLAutoDrawable; import javax.media.opengl.GLEventListener; import javax.media.opengl.GLProfile; import javax.media.opengl
import javax.media.opengl.GLAutoDrawable;
import javax.media.opengl.GLEventListener;
import javax.media.opengl.GLProfile;
import javax.media.opengl.GLCapabilities;
import javax.media.opengl.awt.GLCanvas;
import javax.swing.JFrame;
import java.awt.BorderLayout;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
/**
* A minimal program that draws with JOGL in a Swing JFrame using the AWT GLCanvas.
*
* @author Wade Walker
*/
public class OneTriangleSwingGLCanvas implements MouseListener{
static {
// setting this true causes window events not to get sent on Linux if you run from inside Eclipse
GLProfile.initSingleton( false );
}
public static void main( String [] args ) {
GLProfile glprofile = GLProfile.getDefault();
GLCapabilities glcapabilities = new GLCapabilities( glprofile );
final GLCanvas glcanvas = new GLCanvas( glcapabilities );
OneTriangleSwingGLCanvas mouse = new OneTriangleSwingGLCanvas();
glcanvas.addMouseListener(mouse);
glcanvas.addGLEventListener( new GLEventListener() {
@Override
public void reshape( GLAutoDrawable glautodrawable, int x, int y, int width, int height ) {
OneTriangle.setup( glautodrawable.getGL().getGL2(), width, height );
}
@Override
public void init( GLAutoDrawable glautodrawable ) {
}
@Override
public void dispose( GLAutoDrawable glautodrawable ) {
}
@Override
public void display( GLAutoDrawable glautodrawable ) {
OneTriangle.render( glautodrawable.getGL().getGL2(), glautodrawable.getWidth(), glautodrawable.getHeight() );
}
});
final JFrame jframe = new JFrame( "One Triangle Swing GLCanvas" );
jframe.addWindowListener( new WindowAdapter() {
public void windowClosing( WindowEvent windowevent ) {
jframe.dispose();
System.exit( 0 );
}
});
jframe.getContentPane().add( glcanvas, BorderLayout.CENTER );
jframe.setSize( 640, 480 );
jframe.setVisible( true );
}
@Override
public void mouseClicked(MouseEvent e) {
// TODO Auto-generated method stub
System.out.println("Mouse pressed at : (" + e.getX() + ", " + e.getY() + ")");
}
@Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
}
}
//OneTriangle.java
import javax.media.opengl.GL;
import javax.media.opengl.GL2;
import javax.media.opengl.glu.GLU;
public class OneTriangle {
protected static void setup( GL2 gl2, int width, int height ) {
gl2.glMatrixMode( GL2.GL_PROJECTION );
gl2.glLoadIdentity();
// coordinate system origin at lower left with width and height same as the window
GLU glu = new GLU();
glu.gluOrtho2D( 0.0f, width, 0.0f, height );
gl2.glMatrixMode( GL2.GL_MODELVIEW );
gl2.glLoadIdentity();
gl2.glViewport( 0, 0, width, height );
}
protected static void render( GL2 gl2, int width, int height ) {
gl2.glClear( GL.GL_COLOR_BUFFER_BIT );
// draw a triangle filling the window
gl2.glLoadIdentity();
gl2.glBegin( GL.GL_TRIANGLES );
gl2.glColor3f( 1, 0, 0 );
gl2.glVertex2f( 0, 0 );
gl2.glColor3f( 0, 1, 0 );
gl2.glVertex2f( width, 0 );
gl2.glColor3f( 0, 0, 1 );
gl2.glVertex2f( width / 2, height );
gl2.glEnd();
}
}
语句
jframe.setSize(640480)
指定整个框架的大小,包括任何装饰,如拖拽条和边框。您可以检查框架的外观
另外,
GLCanvas
是一个重量级组件。而不是混合,考虑将它添加到AWT <代码>框架< /C> > /P>左上角的坐标是什么?我尝试使用GETInStices(),它返回边框和标题栏的大小。然后,我通过将这些值添加到宽度和高度来调整框架的大小。但我仍然看到不正确的坐标。请划掉最后的评论。我使用BorderLayout.SOUTH而不是center将glcanvas添加到框架中,当我查看左下角时,坐标是正确的。但是我仍然在窗口的顶部和右侧缺少一些空间,即使仍然调整了大小。Frame
的默认布局是BorderLayout
。您可以尝试GridLayout
。此面板
默认为流程布局
,具有正确的几何图形。