Tag: java 2d

Canvas fillRect()未填充已定义的canvas

我正在扩展Canvas并将其添加到JFrame 。 我知道AWT和Swing不应该是混合的,并且在JPanel上绘图是首选,但我正在尝试遵循游戏引擎教程,我想坚持它,因为我到目前为止工作。 Canvas将minimumSize , maximumSize和prefferedSize设置为maximumSize的尺寸。 当我进行绘图调用graphics.draw(0,0,550,400)它不会像应该的那样填满整个屏幕。 我将绘图调用更改为graphics.draw(0,0,560,410)基本上为它添加了10px,它填满了整个屏幕。 怎么了? BTW: graphics.draw(10,10,550,400从角落开始绘制矩形,所以我不认为JFrame是问题。 Launcher类内部的主要调用 public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { game.setMinimumSize(DIMENSIONS); game.setMaximumSize(DIMENSIONS); game.setPreferredSize(DIMENSIONS); game.frame = new JFrame(NAME); game.frame.setLayout(new BorderLayout()); game.frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); game.frame.add(game, BorderLayout.CENTER); game.frame.pack(); game.frame.setResizable(false); game.frame.setLocationRelativeTo(null); game.frame.setVisible(true); Logger.log(TAG, “Game starting”); game.start(); } }); } 平局调用, Launcher.HEIGHT和WIDTH为550,400 public void draw(float deltaTime, […]

2d数组java中的最小值和最大值

我想输出2d数组的最大值和最小值。 Max工作得很好,但是即使数组中没有零,min也总是输出零。我将Math.random()设置为99,以防止在这个例子中数组中获得零的机会更小。 Heres完整代码: public class e { public static void main(String[] args) { int a[][] = new int [5][5]; int l = a[0][0]; int m = a[0][0]; int i,j,r,k; for(i=0;i<a.length;i++) // for(j=0;j<a[i].length;j++){ // 2d array random number generator a[i][j] =(int)(Math.random()*99); // } for(i=0;i<a.length;i++){ // for(j=0;j<a[i].length;j++) // // create 2d array and output it System.out.print(a[i][j] + […]

哪个是此设计的更好的顶级容器,JFrame与Jpanels,或JDesktop与JInternalFrames

我是Swing和AWT的初学者,我正在寻找使用Netbeans构建GUI。 我的GUI需要三个区域,我目前正在考虑将其作为JFrame上的JPanels。 我需要一个“绘图”面板,它将监听鼠标输入并绘制Java2D形状。 绘图面板将固定在左上角。 另外两个区域是“属性”滚动窗格和“控制器”滚动窗格。 控制器窗格将确定将通过按钮显示哪些绘制元素,属性滚动窗格将显示有关在绘图窗格中单击的任何形状对象的详细信息(端点,颜色等)。 绘图区域的典型用例是绘图区域中的第一次点击将是形状的第一组坐标,IE:一条线。 该点击将被捕获为point2d对象。 第二次单击将是第二个point2D对象,并且将在两者之间构建一条线。 控制器区域将具有“圆圈”,“线”,“椭圆”等按钮。根据单击的控制器按钮,将仅在绘图区域中绘制该类型的形状。 控制器和属性滚动窗格将不可移动,它们将分别锁定并可调整到GUI的底部和右侧。 作为初学者,我正在努力使用最好的组件。 我一直在阅读JDesktop和JInternalFrame,但似乎我并不真的需要这一切。 一个简单的JFrame有三个JPanel就足够了吧? 更具体地说,我认为我需要一个顶级JFrame,一个JPanel用于绘图框架和两个JScrollPanels。 我需要在绘图窗格中使用鼠标监听器来捕获每次单击的坐标,以及控制窗格中每个按钮的监听器。 我可以在JPanel上放置一个鼠标监听器,并为其绘制Java2D形状,还是需要在JPanel内部使用不同的(更好的?)容器来绘制它?

如何从Java2D生成的图形生成事件

我在java.awt.geom.Ellipse2D的帮助下制作了一个Ellipse 现在,我希望每当用户点击该椭圆时,就会生成一个事件,以便我可以监听该事件并根据生成该事件的椭圆执行后续任务。

使用没有Opengl或Direct3d管道的Java2d进行平滑绘图?

当禁用opengl和direct3d管道时(通过使用-Dsun.java2d.d3d = false和-Dsun.java2d.opengl = false调用vm),我无法找到使用Java2d进行任何平滑移动或动画的方法 下面的快速和脏代码演示了我的问题。 它绘制了一个在屏幕上移动的框。 盒子位置每秒更新大约60次,屏幕重绘次数尽可能多。 它使用BufferStrategy类来实现双缓冲; 翻转是在“bs.show();”完成的。 代码(按退出退出): import java.awt.Color; import java.awt.Frame; import java.awt.Graphics; import java.awt.GraphicsConfiguration; import java.awt.GraphicsDevice; import java.awt.GraphicsEnvironment; import java.awt.Rectangle; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.awt.image.BufferStrategy; public class FluidMovement { private static volatile boolean running = true; private static final int WIDTH = 500; private static final int HEIGHT = […]

停止全屏窗口以最小化JOptionPane.showMessageDialog?

代码 private MainApp() /* Extends JFrame */{ DisplayMode displayMode = new DisplayMode(800, 600, 16, 75); ScreenManager.setFullScreenWindow(displayMode, this); } 问题 每当我打电话: JOptionPane.showMessageDialog(MainApp.getInstance(), “Test Message Box”); 窗口由于某种原因最小化,然后我必须重新激活它。 重新激活窗口后,消息框显示。 问题 当我调用消息框时,有没有办法阻止全屏窗口最小化?

如何在Java中更改图表Scale

我有一个图表,其中x轴显示时间,y轴显示我的数据。 我想通过为x轴选择不同的指标来更改比例。 例如秒,分和小时刻度。 默认值为秒。 因此,如果我选择分钟,图表应该更小并且更加弯曲。 任何想法? UI没有完成,但是你想假设有x和y轴。 参数度确定它应缩放到秒(度= 1),分钟(度= 60)或小时(度= 3600) private void drawLines(Graphics g, ArrayList points,int degree) throws Exception { if (points == null || points.isEmpty()) { throw new Exception(“No points found!!!”); } for (int i = 0; i < points.size() – 1; i++) { Point firstPoint = points.get(i); Point secondPoint = points.get(i + […]

如何在Java Swing中创建投影,内部发光和外部发光?

我使用Graphics2D界面生成一些图像,偶尔我希望能够在图像上绘制一些文本并应用于Adobe Photoshop中的效果。 现在我在文本上生成一个“阴影”我正在绘制文本两次,一次是原始颜色,一次是黑色,有一个轻微的(1px)x和y偏移。 不幸的是,这太简单了,因为我需要更多地控制阴影(不透明度,大小,传播)。 至于内发光和外发光,我不确定从哪里开始; 面具/渐变涂料/ alpha混合? 是否有用于生成这些类型效果的Java库? 如果不是,你将如何创造这些效果?

单击鼠标时java绘制一个圆圈

我正在编写一个程序,当点击鼠标时,将绘制一个圆圈。 到目前为止我写的下面的代码。 import java.awt.*; import javax.swing.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import javax.swing.event.*; import java.awt.geom.*; public class test extends JFrame implements ActionListener, MouseListener { Shape circle = new Ellipse2D.Float(10, 10, 10, 10); public test () { setSize(250,150); addMouseListener(this); } public static void main(String[] args) { //TODO code application logic here java.awt.EventQueue.invokeLater(new Runnable() […]

在Java 2D中实现Polygon2D

我正在使用Java2D库在Java中创建一个2D游戏,我真的需要一个浮点精度的Polygon对象,我可以用它来绘制游戏对象并对它们进行碰撞检测。 不幸的是,Java的Polygon对象只有int精度,并且没有像Rectangle和Rectangle2D那样的Polygon2D。 我已经做了足够的研究,看到我有一些选择,但它们似乎都不是很好。 使用Path2D 。 据该论坛的一位Java开发人员称,缺少Polygon2D是一种疏忽,但其建议的替代品是Path2D。 不幸的是,Path2D没有提供访问其各个顶点或边的方法,这是我进行碰撞检测所需要的(具体来说,我需要获得与每条边正交的矢量)。 实现我自己的Polygon2D实现Shape接口,这样我仍然可以将它传递给Graphics2D.draw(Shape) 。 这看起来很难。 Shape接口需要棘手的实现方法,如contains(Rectangle2D)和getPathIterator(AffineTransform) 。 特别是对于getPathIterator ,似乎为了实现它,我需要返回一个PathIterator类型的对象,但是公共AWT包中没有可用的PathIterator接口的具体实现。 在一个“记住”各个顶点并将它们提供给客户端的对象中包裹Path2D 。 当我需要一个记住其组件形状的区域时,这对我有用:我将它包装在一个实现Shape接口的CompoundShape类中,并将所有Shape方法转发给Area的实现,同时跟踪添加到其中的每个Shape。 ArrayList中的区域。 这个问题是,如果我跟踪float s的两个数组中的各个顶点,就没有办法将它们暴露给用户而没有用户更改顶点的可能性 – 并且因为直接数组访问会发生这种情况,内部Path2D不会收到有关更改的通知。 复制Polygon.java 。 Java的Polygon类的实际源代码可以在grepcode.com上找到,我可以简单地用float s替换与顶点相关的int ,以获得Polygon2D。 不幸的是,当我尝试这个时,行import sun.awt.geom.Crossings; 抛出编译器错误,说“由于对所需库C:\ Program Files \ Java \ jre7 \ lib \ rt.jar的限制,无法访问类型交叉”。 根据这个问题 ,因为Sun的许可协议会阻止您用自己的Java类替换核心Java类,但Polygon不会尝试这样做 – 它只是创建了一个类型为sun.awt.geom.Crossings的对象,没有替换或扩展发生了,我确保将我的Polygon副本放在一个名为“java”的包中。 进行此操作的最佳方法是什么? 我很欣赏这些选项中的一个如何工作的建议,或者对于没有遇到这些问题的另一个选项的想法。