Tag: 图形

有没有简单的方法在JPanel上绘制圆圈?

我在使用drawOval(x,y,width,height)方法时遇到了麻烦,该方法假定x和y值代表“要绘制的椭圆形左上角”的坐标( javadoc ) 我希望x和y值代表圆的中心点 。 我该怎么做呢? 谢谢

Java中的形状组合?

java Shape接口契约和库例程是否允许将多个形状组合成一个扩展Shape接口的对象? 例如,我可以定义类Flower ,它将由花瓣和核心的几个椭圆组成? 或者Shape只假设一个连续的轮廓? 如果是这样,那么Java中是否存在用于保存多个形状的任何类,可能是某些用于矢量化图形的类?

java printerjob景观白色空间

我目前在打印机工作时遇到问题,它适用于人像图像,但对于风景图像,它会切割部分图像并填充白色空间。 这是我的代码 编辑 PrintService printService = PrintServiceLookup.lookupDefaultPrintService(); BufferedImage bufferedImage = ImageIO.read(new File(“house.jpg”)); boolean isLandscape = bufferedImage.getWidth() > bufferedImage.getHeight(); PrinterJob printerJob = PrinterJob.getPrinterJob(); printerJob.setPrintService(printService); printerJob.setCopies(copies); PageFormat pageFormat = printerJob.defaultPage(); pageFormat.setOrientation(isLandscape ? PageFormat.LANDSCAPE : PageFormat.PORTRAIT); Paper paper = new Paper(); paper.setSize(pageFormat.getWidth(), pageFormat.getHeight()); paper.setImageableArea(0.0, 0.0, paper.getWidth(), paper.getHeight()); pageFormat.setPaper(paper); printerJob.setPrintable(new Printable(){ @Override public int print(Graphics graphics, PageFormat pageFormat, int […]

java + Swing:矩形或其他“精灵”的有效叠加

我不太清楚怎么说这个,所以请耐心等待。 我在一个带有OverlayLayout的容器JPanel有两个JPanel 。 容器中的两个JPanel都覆盖了paint(Graphics) 。 底部JPanel是不透明的,并绘制了一些相当复杂的图形,因此渲染需要“很长”的时间(10秒或100毫秒)。 顶部JPanel是透明的,只是根据鼠标输入绘制一个矩形或线条或简单的形状,所以它真的很快。 有没有办法设置,所以当我更改上面板中的简单形状时,它不会重绘底部面板? (例如它以某种方式缓存底部面板) 我很熟悉w /概念,比如bitblt,double-buffering和XOR-drawing,但不确定在这里应用什么。

如何在java中监听图形环境或设备更改

在java中,可以使用当前的图形环境 GraphicsEnvironment graphicsEnvironment = GraphicsEnvironment.getLocalGraphicsEnvironment(); 而不是循环使用设备 GraphicsDevice[] screenDevices = graphicsEnvironment.getScreenDevices(); for (int i = 0; i < screenDevices.length; i++) { GraphicsDevice graphicsDevice = screenDevices[i]; … } 但是, GraphicDevice的数量可以在运行时更改,例如通过插入USB监视器。 或者,如果有多个监视器,用户可以更改GraphicsDevice的分辨率或相对于另一个图形设备移动它。 如何监听GraphicsEnvironment和GraphicDevice的更改? 编辑 我尝试使用守护程序线程实现更改检测,该守护程序线程以特定间隔检查图形环境,但它不起作用。 它不起作用,因为GraphicsEnvironment保存在statc变量中并且仅初始化一次。 此外, GraphicsEnvironment的子类缓存GraphicDevice 。 因此,只有在重新启动jvm进程时才会检测到新的GraphicDevice 。

Java全屏独家模式

我使我的应用程序在独占模式下全屏显示,但是当我显示输入对话框时,应用程序被最小化。 我希望应用程序保持全屏,并在其上显示输入对话框。 这就是我全屏渲染应用程序的方法: setUndecorated(true); GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); GraphicsDevice gs = ge.getDefaultScreenDevice(); gs.setFullScreenWindow(this); validate(); 编辑: 这是我打开对话框的方式: JOptionPane.showMessageDialog(StartingPoint.this,txt, “You are on: ” + planet, JOptionPane.INFORMATION_MESSAGE, icon);

按键上逐渐加速精灵; 钥匙释放逐渐减速

我一直试图弄清楚如何在按下按键时逐渐加速精灵,然后一旦释放按键,逐渐减速停止,就像小行星中的船一样。 如果可能的话,我想在没有任何游戏引擎的情况下这样做。 我在SO上搜索了这个并找到了相关的问题,但他们并没有在我看来完全回答我的问题。 到目前为止我所想到的是: //while the key is being pressed //move by increasing y value //but continue to increase the amount y increases by as you hold this down, //until it reaches certain maxSpeed //when the key is released, gradually decelerate to zero 我只是不确定如何正确编程,因为我只能想办法增加相同的值而不是逐渐加速。 所以这是我的目标( 逐渐加速,然后逐渐减速) : 我是初学者,对所有想法持开放态度,但我可能没有正确处理这个问题的事实可能是因为我不像其他人那么了解

AlphaComposite透明度与重绘重叠为黑色

所以我在另一个面板上有一个图像,该图像是透明的,因此您可以看到它下面的面板。 我要做的是使用repaint()淡化图像(使用java.awt.Graphics中的drawImage()方法绘制),直到它完全透明,这样你就可以清楚地看到它下面的面板。 截至目前,图像只是淡入黑色而不是透明纹理。 这是我现在的一些代码: paintComponent方法: public void paintComponent(Graphics g) { super.paintComponent(g); float alpha = 1f-(.01f*(float)opcounter); Graphics2D g2d = (Graphics2D)g; g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_IN, alpha); g2d.drawImage(img, 0, 0, null); } 为定时器调用的actionPerformed方法 public void actionPerformed(ActionEvent e) { opcouner++; panel.repaint(); } 我的代码的更长(无凝聚)版本:(包括用于计时器的paintComponent和Mover类) public void paintComponent(Graphics g) { super.paintComponent(g); Dimension framesize = frame.getSize(); this.setBounds(0,0,framesize.width, framesize.height-61); if (buff) { //this.add(buffer); if (opcounter <= […]

Java Graphics2D浮点精确drawOval替代?

所以我试图绘制一个圆弧并围绕其圆形端点放置一个圆圈,但由于四舍五入到最近的像素,我遇到了问题。 这在一些但不是所有情况下都可见。 有没有办法使用浮点和消除锯齿绘制圆圈以消除此舍入错误? 您可以运行此代码来查看问题。 为了清晰起见,我绘制了长度为0的弧(显示为大点)而不是全弧。 import java.awt.*; import javax.swing.*; public class Example extends JFrame { private int CENTER = 200; private static int WINDOW = 400; private int LEFT = 50; private int TOP = 50; private int DIM = 300; private int DIAMETER = 26; public Example () { super(); } public void paint […]

保持绘制图形 – 删除super.paintComponent

我有一个名为Foo的类,它扩展了一个名为Bar的类,它扩展了JPanel并实现了ActionListener。 当我选择Circle并单击绘制按钮时,我绘制一个圆,当我按下矩形并单击绘制时,它会删除以前的形状并绘制一个矩形。 但是,我想在JPanel上保留所有形状,直到我选择单击“删除”按钮。 所以我删除了super.paintComponent(g)并且它可以工作,但它也会导致类Bar的按钮以一种小故障的方式重新出现。 如何再次停止绘画按钮? 我想不要扩展Bar并让Foo扩展JPanel。 public class Bar extends JPanel implements ActionListener { public void actionPerformed(ActionEvent e) { if (e.getActionCommand() == “Draw”) { this.requestDraw = true; repaint(); } if (e.getActionCommand() == “Circle”) { requestRectangle = false; requestTriangle = false; requestCircle = true; } if (e.getActionCommand() == “Rectangle”) { requestCircle = false; requestTriangle = false; […]