Java 调用后重新绘制方法不起作用

Java 调用后重新绘制方法不起作用,java,repaint,Java,Repaint,我正在创建一个应用程序来实现一个算法,但在此之前,我需要让paint方法正常工作 我有一个按钮,单击它我调用测试方法,我从println获取输出“valuesset”,但是repaint方法没有得到执行 但在另一个简单的应用程序中也有同样的功能 任何帮助都会很好 顺便说一句,我是个电子人,所以我不太懂编程 This is the class for painting ` import java.awt.*; import java.util.ArrayList; import javax.sw

我正在创建一个应用程序来实现一个算法,但在此之前,我需要让paint方法正常工作 我有一个按钮,单击它我调用测试方法,我从println获取输出“valuesset”,但是repaint方法没有得到执行

但在另一个简单的应用程序中也有同样的功能

任何帮助都会很好

顺便说一句,我是个电子人,所以我不太懂编程

This is the class for painting
`

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

public class Draw extends JPanel {

    private java.util.List<Rectangle> rectangles = 
                                new ArrayList<Rectangle>();

    public Draw() {
        setOpaque(true);
        setBackground(Color.WHITE);
        rectangles = new ArrayList<Rectangle>();
    }

    public void test(){
         rectangles.add(new Rectangle(10,10,10,10));
         rectangles.add(new Rectangle(20,20,10,10));
         rectangles.add(new Rectangle(30,30,10,10));
         rectangles.add(new Rectangle(40,40,10,10));
         rectangles.add(new Rectangle(50,50,10,10));       
         rectangles.add(new Rectangle(60,60,10,10));
         this.setValues(rectangles);
         System.out.println("in test class");
    }

    public void setValues(java.util.List<Rectangle> rectangles) {
        this.rectangles = rectangles;
        repaint();
        System.out.println("values set!!");
    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.drawRect(5, 5, 100, 300);
        for (Rectangle rectangle : rectangles) {
            g.drawRect(rectangle.x, rectangle.y,rectangle.width, rectangle.height);
        }
        System.out.println("WORKING");
    }   
}

`
主课

import java.awt.EventQueue;
import javax.swing.JFrame;


public class Program extends JFrame{

    public static void main(String[] args) {
        Runnable runnable = new Runnable() {
            @Override
            public void run() {
                new Design().DisplayGUI();
            }
        };
        EventQueue.invokeLater(runnable);
    }
}
处理程序类

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
public class HandlerClass implements ActionListener{

    private String string ="";
    ExampleOne ExampleOne = new ExampleOne();
    Draw draw = new Draw();

    public void actionPerformed(ActionEvent event){

        string = ((JButton) event.getSource()).getActionCommand();

        if(string == "Example 1"){
            ExampleOne.run();
        }
    }
}

class ExampleOne{
    Draw draw = new Draw();
    public void run(){
        System.out.println("in example one class"); 
        draw.test();
    }
}

方法名称和变量的可读性应为
lowerCamelCase
。除了初始化之外,我看不到在任何地方使用类Draw。@Nfear现在编辑了文章您正在设置未添加到框架的面板的值。在
ExampleOne
中,您正在使用
Draw Draw=new Draw()。它应该是先前添加到框架中的面板。试着调试,看看每一步都发生了什么。@Nfear现在犯了我的错误,你说的是对的。但是,我应该如何将最初在design类中创建的面板传递给另一个类。方法名称和变量应为
lowerCamelCase
,以确保可读性。除了初始化之外,我看不到在任何地方使用类Draw。@Nfear现在编辑了文章您正在设置未添加到框架的面板的值。在
ExampleOne
中,您正在使用
Draw Draw=new Draw()。它应该是先前添加到框架中的面板。试着调试,看看每一步都发生了什么。@Nfear现在犯了我的错误,你说的是对的。但是我应该如何将最初在设计类中创建的面板传递到另一个类中呢。
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
public class HandlerClass implements ActionListener{

    private String string ="";
    ExampleOne ExampleOne = new ExampleOne();
    Draw draw = new Draw();

    public void actionPerformed(ActionEvent event){

        string = ((JButton) event.getSource()).getActionCommand();

        if(string == "Example 1"){
            ExampleOne.run();
        }
    }
}

class ExampleOne{
    Draw draw = new Draw();
    public void run(){
        System.out.println("in example one class"); 
        draw.test();
    }
}