【问题标题】:Draw a car as a polygon and make it moves inside Java Swing将汽车绘制为多边形并使其在 Java Swing 中移动
【发布时间】:2021-03-29 23:22:55
【问题描述】:

我正在尝试将汽车绘制为摆动的多边形,并在单击按钮时左右移动

问题是我在运行程序时无法在屏幕上显示按钮,无法让它们工作

而且我不知道在使用多边形时如何实现用户界面内部的按钮

这是我的代码:-

package java2d;

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

public class Java2D extends JFrame{

    int xValues[];
    int yValues[];
    private JButton Right, Left;

    public Java2D() {
        super( "Drawing lines, rectangles and ovals" );
        setSize( 500, 300 );
        setVisible( true );
    }

    public void paint( Graphics g ) {
    
        int xValues[] = { 40, 100, 130, 230, 260, 320, 320, 40 };
        int yValues[] = { 120, 120, 40, 40, 120, 120, 170, 170 };
        Polygon polygon1 = new Polygon( xValues, yValues, 8 );
        g.setColor(Color.blue);
        g.drawPolygon( polygon1 );
    
        Right = new JButton("Right");
        Left = new JButton("Left");
    
        Right.setSize(50, 50);
        Left.setSize(50, 50);
    
        Right.setLocation(100, 200);
        Left.setLocation(200, 200);
    
        g.add(Right);
        g.add(Left);
    
    }

    public void actionPerformed(ActionEvent event) {
        if(event.getActionCommand().equals("Right")){
            for (int i=0; i<xValues.length;i++) {
            xValues[i] = xValues[i] + 10;
            yValues[i] = yValues[i] + 10;
            }
        }
    
        if(event.getActionCommand().equals("Left")){
            for (int i=0; i<xValues.length;i++) {
            xValues[i] = xValues[i] + 10;
            yValues[i] = yValues[i] + 10;
            }
        }

    repaint();
    }


    public static void main(String[] args) {
        Java2D application = new Java2D();
        application.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
    }
}

谢谢

【问题讨论】:

标签: java swing graphics graphics2d


【解决方案1】:

很多问题:

  1. 变量名称不应以大写字符开头。

  2. 自定义绘画是通过覆盖JPanel paintComponent() 方法完成的,然后将面板添加到框架中。阅读 Custom Painting 上的 Swing 教程中的部分,了解更多信息和工作示例,以帮助您入门。从工作代码开始并根据您的要求对其进行修改。

  3. 永远不要在绘画方法中创建 Swing 组件。当 Swing 确定组件需要重新绘制时,绘制方法会不断调用,因此您不想继续创建新按钮。

  4. 通常要向框架添加按钮,您将创建一个 JPanel 并将按钮添加到面板。然后使用frame.add(buttonsPanel, BorderLayout.PAGE_START) 将面板添加到框架中。然后,您将使用frame.add(paintingPanel, BorderLayout.CENTER) 将您的绘画面板添加到框架中。阅读 Layout Managers 上的 Swing 教程部分,了解更多信息和示例。

  5. 您应该使用Polygontranslate() 方法,而不是尝试更新用于创建Polygon 的数组的值。

请随时参考 Swing 教程,因为它包含大多数 Swing 基础知识的示例。

【讨论】:

  • @OP 要添加到这个很好的答案是drawing a polygon on a JPanel 的一个小例子,哦,不要不必要地扩展JFrame。你也有一个actionPerformed 方法,你在哪里实现ActionListener 并注册你的JButton 进行操作?从显示的代码中,单击按钮时永远不会调用该方法
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-02
  • 1970-01-01
  • 2015-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多