java Swing按钮 Action

标签 java swing actionlistener

我是java新手,我想使用java swing开发一个简单的绘画程序。 每当我点击按钮时,我的简单绘画程序应该绘制一个像三角形、圆形和正方形这样的形状。 我设法绘制这些形状并在没有按钮的情况下打印它,但我不能使用 ActionListener 来做到这一点?

如您所见,我现在有一个按钮,每当单击此按钮时我都想绘制椭圆形。 这是我到目前为止正在处理的代码:

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


public class PaintProject extends JComponent implements ActionListener{
    public static void main(String[] args) {


        JFrame frame=new JFrame("NEW PAINT PROGRAME!");
        JButton button1=new JButton("ADD");
        PaintProject paint=new PaintProject();

        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        frame.setLayout(new FlowLayout());
        frame.add(paint);
        frame.add(button1);

        frame.pack();
        frame.setVisible(true);

    }
    @Override
    public Dimension getPreferredSize(){
        return new Dimension(500,500);

    }
    @Override
    protected void paintComponent(Graphics g){
        super.paintComponent(g);
        g.setColor(Color.red);
        g.fillOval(0,0, 100, 100);

    }

    @Override
    public void actionPerformed(ActionEvent e) {


    }


}

最佳答案

请您采取以下步骤:

第 1 步:

main 方法中的 PaintProject Paint=new PaintProject(); 之后插入 button1.addActionListener(paint); PaintProject.java

第 2 步:

删除名为 protected void PaintComponent(Graphics g) 的方法。相反,创建以下方法:

 private void drawOval(){
    Graphics g = this.getGraphics();
    g.setColor(Color.red);
    g.fillOval(0,0, 100, 100);        
 }

第 3 步:

调用上述方法如下:

@Override
public void actionPerformed(ActionEvent e) {
     drawOval();      
}

编辑:

以下示例演示了如何在单击相应按钮时绘制两个形状:

import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.WindowConstants;

public class PaintProject extends JComponent implements ActionListener {
    public static void main(String[] args) {

        JFrame frame = new JFrame("NEW PAINT PROGRAME!");
        JButton ovalButton = new JButton("Oval");
        ovalButton.setActionCommand("Oval");

        JButton rectangleButton = new JButton("Rectangle");
        rectangleButton.setActionCommand("Rectangle");

        PaintProject paint = new PaintProject();
        ovalButton.addActionListener(paint);
        rectangleButton.addActionListener(paint);
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        frame.setLayout(new FlowLayout());
        frame.add(paint);
        frame.add(ovalButton);
        frame.add(rectangleButton);

        frame.pack();
        frame.setVisible(true);

    }

    @Override
    public Dimension getPreferredSize() {
        return new Dimension(500, 500);

    }

    private void drawOval() {
        Graphics g = this.getGraphics();
        g.setColor(Color.red);
        g.fillOval(0, 0, 100, 100);
    }

    private void drawRectangle() {
        Graphics g = this.getGraphics();
        g.setColor(Color.green);
        g.fillRect(150, 150, 100, 100);
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        String command = e.getActionCommand();
        if (command.equals("Oval")) {
            drawOval();
        } else if (command.equals("Rectangle")) {
            drawRectangle();
        }

    }

}

关于java Swing按钮 Action ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38291525/

相关文章:

java - Java中如何使用ActionListener打开一个程序?

java - 尽管电子邮件和密码的真实值无法使用 mysql 登录

java - Struts 2 validator

java - 如何优雅地停止嵌入式 Tomcat 并且只有在当前处理请求必须完成后才能停止 tomcat

java - 如何让多个键绑定(bind)同时工作?

Java - 这些是哪些类型的类;哪个是匿名内部类?

Java,对构成有向图的节点 ArrayList 执行深拷贝

java - 将 JTable 中的数据复制为 HTML

java - 图形对象上的 MouseListener

java - 为什么 java.awt.Graphics.drawLine 异常慢?