Java Can';t从另一个面板更新JPanel

Java Can';t从另一个面板更新JPanel,java,swing,jpanel,Java,Swing,Jpanel,我正在尝试从另一个面板更新面板。一个显示图形和路径,另一个运行算法并更改路径。当路径被更新时,我希望图形面板被更新,但这并没有发生 这两个都是面板类:(一个接收另一个作为参数。这是个坏主意吗?) aa这就是它们的名称: public void displayGUI() throws IOException{ JFrame frame = new JFrame("Algorithm Comparison"); frame.setDefaultCloseOperati

我正在尝试从另一个面板更新面板。一个显示图形和路径,另一个运行算法并更改路径。当路径被更新时,我希望图形面板被更新,但这并没有发生

这两个都是面板类:(一个接收另一个作为参数。这是个坏主意吗?)

aa这就是它们的名称:

public void displayGUI() throws IOException{
        JFrame frame = new JFrame("Algorithm Comparison");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        fixedop = new FixedOptionPanel();
        allop = new JPanel();

        JPanel mainpanel = new JPanel();

        mainpanel.setLayout(new GridLayout(1,2));

        canvas = new GraphPanel("/u1/cmperezgavilantorres/workspacejava/graphs/g1");
        options = new OptionPanel("Genetic",canvas);


        allop.setLayout(new GridLayout(2,1));
        allop.add(fixedop);
        allop.add(options);
        mainpanel.add(canvas);
        mainpanel.add(allop);
        mainpanel.setBackground(Color.WHITE); 
        frame.setContentPane(mainpanel);
        frame.pack();
        frame.setLocationByPlatform(true);
        frame.setVisible(true);
    }
你能理解为什么GraphPanel类中的setPath方法似乎没有效果吗


请帮助:(

谢谢@kiheru,这实际上与面板无关

这幅画很好,但我调用的是
graph.getPoint(I)
,而不是
graph.getPoint(path[I])


非常感谢您的帮助。

在主类中使用updateAllPanels()方法可能是一个更好的主意。您似乎没有基于新路径绘制任何东西。
paintComponent()
有一个
hasPath
分支,但使用的数据来自graph对象(并且已经绘制过一次?)我不会将另一个类用作参数来引用它,而是将canvas设置为public&static,这样您就可以使用
class.canvas
(将
class
替换为包含
displayGUI()
的任何类)。但是,这是否有效取决于您的项目结构-您可能需要稍微更改它,例如,通过将其他项目添加到您的建筑路径或类似的方式。
package algcomp.gui.main;

import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingConstants;

import algcomp.alg.Genetic;
import algcomp.alg.PathChromosome;


public class OptionPanel extends JPanel{
    String type;
    GraphPanel gp;


    Genetic genalg;
    boolean alg_initialized;

    //genetic
    JLabel gensizeL;
    JLabel mutprobL;
    JLabel timerL;
    JTextField gensizeTF;
    JTextField mutprobTF;
    JTextField timerTF;

    JButton runstepB;
    JButton runallB; 

    public OptionPanel(String _type, GraphPanel _gp){
        type = _type;
        gp = _gp;

        runstepB = new JButton("Run Step");
        runallB = new JButton("Full Run"); 


        if(type.equals("Genetic")){
            genPan();
            alg_initialized = false;
        }

    }

    //preferred size of panel
    public Dimension getPreferredSize(){

        return (new Dimension(250,150));
    }

    //
    private void genPan(){
        gensizeL = new JLabel("Generation size: ", SwingConstants.RIGHT);
        mutprobL = new JLabel("Mutation probability: ", SwingConstants.RIGHT);
        timerL = new JLabel("Timer for full run (ms): ", SwingConstants.RIGHT);

        gensizeTF = new JTextField("20");
        mutprobTF = new JTextField("0.1");
        timerTF = new JTextField("60000");



        this.setLayout(new GridLayout(4,2));

        this.add(gensizeL);
        this.add(gensizeTF);
        this.add(mutprobL);
        this.add(mutprobTF);
        this.add(timerL);
        this.add(timerTF);
        this.add(runstepB);
        this.add(runallB);

        //This function runs when runstep button is clicked
        runstepB.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                if(!alg_initialized){
                    if(type.equals("Genetic")){
                        genalg = new Genetic(gp.getGraph(),Integer.parseInt(gensizeTF.getText()),Double.parseDouble(mutprobTF.getText()),Integer.parseInt(timerTF.getText()));
                        alg_initialized = true;
                    }
                }

            if(type.equals("Genetic")){
                gp.setPath(((PathChromosome) genalg.step()).getPath()); 
            }

            }
        });

        //This function runs when runall button is clicked
        runallB.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                System.out.println("Will launch a full run someday :D ");
            }
        });
    }

}
public void displayGUI() throws IOException{
        JFrame frame = new JFrame("Algorithm Comparison");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        fixedop = new FixedOptionPanel();
        allop = new JPanel();

        JPanel mainpanel = new JPanel();

        mainpanel.setLayout(new GridLayout(1,2));

        canvas = new GraphPanel("/u1/cmperezgavilantorres/workspacejava/graphs/g1");
        options = new OptionPanel("Genetic",canvas);


        allop.setLayout(new GridLayout(2,1));
        allop.add(fixedop);
        allop.add(options);
        mainpanel.add(canvas);
        mainpanel.add(allop);
        mainpanel.setBackground(Color.WHITE); 
        frame.setContentPane(mainpanel);
        frame.pack();
        frame.setLocationByPlatform(true);
        frame.setVisible(true);
    }