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