标签: java-2d

低悬的图形编程水果?

我目前正在研究Java2D中基于磁贴的游戏,我正在考虑添加一些便宜的眼睛糖果.

例如,实现一个简单的粒子系统(可能像这样对于爆炸和/或烟雾).

您是否有任何关于相对容易编程的效果的建议,这些效果不需要大量(或根本)绘制新艺术?

这些效果的教程和代码示例也是最受欢迎的!

-我做.

PS - 如果绝对必要,我可以切换到像LWJGL/JOGL甚至是Slick这样的东西 - 但我宁愿继续使用Java2D.

java graphics java-2d

3
推荐指数
2
解决办法
1438
查看次数

通过扩展Rectangle类来实现碰撞检测,以使用其包含和交叉方法

我想知道如何实现矩形的简单2D碰撞检测是一个好主意,如下所示:

  1. 制作我自己的扩展Rectangle类的碰撞检测类.
  2. 然后在实例化该对象时执行Collision col = new Rectangle();< - 我应该这样做还是应该避免的事情?我知道我'可以',但我应该吗?
  3. 我想扩展Rectangle类因为contains()intersects()方法; 我应该这样做,还是应该为Java中的2D碰撞检测做些什么?

java swing collision-detection java-2d

3
推荐指数
1
解决办法
2606
查看次数

AffineTransform的问题

你好我是affineTransformjava 新手.我想用它来剪切一些我以后要使用的GUI.现在我只想测试一个示例代码,但我无法解释它的输出.这是代码

    package main;
    import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.FlowLayout;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.geom.AffineTransform;

    import javax.swing.BorderFactory;
    import javax.swing.JFrame;
    import javax.swing.JPanel;

    public class MainClass{
    public static void main(String[] args) {
    JFrame jf = new JFrame("Demo");

    jf.getContentPane().add(new MyCanvas());

    jf.setSize(600, 600);
    jf.setVisible(true);
  }
}

    class Left extends JPanel {

    Left(){
        setPreferredSize(new Dimension(450,450));
        setBorder(BorderFactory.createLineBorder(Color.green));
        setBackground(Color.gray);

    }


      public void paintComponent(Graphics g) {

            super.paintComponent(g);

            Graphics2D g2 = (Graphics2D) g;

            AffineTransform at = new AffineTransform();

            g2.setTransform(at);

            g2.drawRect(getWidth()/2 - 10, getHeight()/2 - 10, 20, …
Run Code Online (Sandbox Code Playgroud)

java swing java-2d affinetransform

3
推荐指数
1
解决办法
3233
查看次数

面板为什么不画?

import javax.swing.*;
import java.awt.*;

class tester {
   public static void main(String args[]) {
     JFrame fr = new JFrame();
     JPanel p = new JPanel();
     p.setBackground(Color.RED);
     p.paintImmediately(20,20,500,500);  
     fr.add(p);
     fr.setVisible(true);
     fr.setSize(2000,2000);
  }
}
Run Code Online (Sandbox Code Playgroud)

我得到一个完全是红色的面板.为什么我不接线?我怎么才能得到它?

java swing colors java-2d paintcomponent

3
推荐指数
1
解决办法
270
查看次数

绘制所有其他组件(Swing,Java)

在我的应用程序中,我需要像Photoshop那样绘制网格线 - 例如,用户可以在文档上拖动线条以帮助他对齐图层.现在,问题在于我能够绘制这样的线条(它只是简单的使用Line2D的简单Java2D绘画),但是我无法将这些线条放在其他所有内容之上,因为当子组件绘制自己时,我的网格线被删除了.

程序结构是这样的:JFrame - > JPanel - > JScrollPane - > JPanel - > [很多其他JPanels,就像层一样]

作为测试,我将绘制代码添加到JFrame,它正确显示我的Line2D实例在其他所有内容之上.但是,当我在子组件中执行任何需要该子项重新绘制的内容时,JFrame中绘制的线将被删除.

我知道这是预期的Swing行为 - 也就是说,它只会重绘那些已经改变的区域.但是,我正在寻找一些方法,不断在其他所有方面绘制线网格线.

我能够让它工作的唯一方法是使用一个Swing Timer,它每隔10ms在我的根组件上调用repaint(),但它消耗了大量的CPU.

更新
示例的工作代码如下.请注意,在我的实际应用程序中,我有许多可以触发重绘()的不同组件,并且没有一个组件引用了执行网格线绘制的组件(当然我可以将它传递给每个人,但是成为最新的选择)

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.geom.Line2D;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class GridTest extends JFrame {
    public static void main(String[] args) {
        new GridTest().run();
    }

    private void run() {
        setLayout(null);
        setPreferredSize(new Dimension(200, 200));
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        final JPanel p = new JPanel();
        p.setBounds(20, 20, 100, 100); …
Run Code Online (Sandbox Code Playgroud)

java swing drawing java-2d

3
推荐指数
1
解决办法
9306
查看次数

为什么我的JComponent没有显示在背景JFrame之上?

为什么我的JComponent没有显示在背景JFrame之上?

请检查以下代码:

class CounterFrame extends JFrame {

    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    private MyPanel myComponent = new MyPanel();
    private JLabel contentPane = new JLabel(new ImageIcon(getClass()
            .getResource("background/2.jpg")));

    CounterFrame() {
        contentPane.setLayout(new GridBagLayout());
        setContentPane(contentPane);
        add(myComponent);
    }

    }

    class MyPanel extends JPanel {

    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    private Font myFont;
    private String target;
    private String raised = "200000";
    private Image background;

    public MyPanel() {

    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);

        Graphics2D …
Run Code Online (Sandbox Code Playgroud)

java swing awt java-2d jframe

3
推荐指数
1
解决办法
118
查看次数

代码正在生成灰色屏幕

我似乎无法解决这里的问题.

import java.awt.Color;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import java.awt.image.BufferedImage;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class GamePanel extends JPanel implements Runnable, MouseMotionListener {

private static final int SCREEN_WIDTH = 640;
private static final int SCREEN_HEIGHT = 480;
private static final int INDENT = 20;

private int playerOneScore = 0;
private int playerTwoScore = 0;
private ImageEntity playerOne = new ImageEntity("Images/bouncer.bmp");
private ImageEntity playerTwo = new ImageEntity("Images/bouncer.bmp");

private int mouseX = 0;
private int …
Run Code Online (Sandbox Code Playgroud)

java swing paint java-2d graphics2d

3
推荐指数
1
解决办法
712
查看次数

在Java中绘制带有尖角的边界路径

我正在开发一个在地图上显示GPS轨迹的应用程序.我想把轨道画成任意厚度的彩色路径.我找到了GeneralPath似乎正在做我想要的课程.但是,我希望彩色路径也有黑色边框.我找不到任何关于如何在路径上添加边框的内容,因此我想出了一个快速的黑色解决方案,首先绘制一条粗黑色路径,然后在顶部绘制一条细彩色路径.

SSCCE:

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.geom.GeneralPath;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class PathBorder {
    private JFrame frame;

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    PathBorder window = new PathBorder();
                    window.frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    public PathBorder() {
        initialize();
    }

    private void initialize() {
        frame = new JFrame();
        frame.setBounds(100, 100, 450, 300);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JPanel panel …
Run Code Online (Sandbox Code Playgroud)

java user-interface swing drawing java-2d

3
推荐指数
1
解决办法
1416
查看次数

试图用JPanel绘制线条

我正在尝试绘制线条JPanel,我已经打了一些墙.我可以让双方失望但是一旦从x线中减去它就会出错.

线条我想画画

package GUIstuff;
import java.awt.Graphics;
import javax.swing.JPanel;

public class DrawPanel extends JPanel{

public void paintComponent (Graphics g){

    super.paintComponent(g);

    int width = getWidth();
    int height = getHeight();

    int drawCounter = 0; // counters for all the while statements 
    int drawCounter2 = 0;
    int drawCounter3 = 0;
    int drawCounter4 = 0;



    int x1 = 0; // cords change with the while statemetns
    int x2 = 0;
    int y1 = 0;
    int y2 = 0;     
    while (drawCounter <= 15){ // counter …
Run Code Online (Sandbox Code Playgroud)

java swing java-2d jpanel paintcomponent

3
推荐指数
1
解决办法
2万
查看次数

Graphics2D setfont()大大减慢了java应用程序的启动速度

嗨伙计们,我正在用java制作游戏,它每秒刷新自己60次.每次执行循环时我都会使用g2d来绘制图像和字符串.如果我这样做g2d.setFont(new Font("Arial", Font.PLAIN, 8)); 并且拉绳并且这将是正常的,但是如果我将字体设置为某些"不熟悉的"字体并执行相同的操作,那么在启动的第一秒中摆动将显示白色屏幕,然后正确地绘制所有内容,它显然太慢了.(2秒)

我在jframe中放了一个jpanel并覆盖jpanel的paint()方法来绘制我需要的所有东西.我已经SwingUtilities.invokeLater在我的代码中使用了.

import javax.swing.*;
import java.awt.*;

public class Window extends JFrame{
    public Window(){
        add(new Board());
        setSize(800,600);
        setVisible(true);
    }
    public static void main(String[] args){
        new Window();
    }

    private class Board extends JPanel {
        Font font = new Font("Bitmap", Font.PLAIN, 64);

        public void paintComponent(Graphics g) {
            super.paintComponent(g);
            Graphics2D g2d = (Graphics2D)g;
            g2d.setFont(font);
            g2d.drawString("This is slow", 220,200);
            Toolkit.getDefaultToolkit().sync();
            g2d.dispose();
            g.dispose();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这不是一个循环,但它非常滞后.

http://fontsov.com/download-fonts/bitmap1159.html

这是可爱的字体,会减慢我们的应用程序."Arial"的速度非常快.怎么能让这个不那么迟钝?

java fonts swing java-2d

3
推荐指数
1
解决办法
1545
查看次数