喜想和大家分享我的Warkaround到已采取了我时间来解决,因为我无法找到任何简单的答案的一个问题。隐藏和显示JavaFX的图表在Swing
我执行的是视其状态的Swing应用程序,无论是显示了JavaFX的图表(火线图)或其他一些内容(对我来说,这是一个JFreeChart的)。 我是添加和删除面板到我的用户界面,但对大多数内容工作正常。
当使用JavaFX,我的内容不会显示出来,一旦它已经可见,然后隐藏。
参见下面非工作示例代码:
CustomFXPanel pn1 = new CustomFXPanel(); //JPanel containing JavaFX Chart
CustomPanel pn2 = new CustomPanel(); //Extends JPanel
JPanel pnContent; //PlaceHolder for either Panel
/**
* Constructor
*/
public MyJFrame(){
init(); //Set up JFrame Size, title etc.
setLayout(new GridLayout(1,1)); //Show the Content all across the Frame
pnContent = pn1;
add(pnContent);
}
/**
* Changes Mode of Application
* @param showFX: True = show fxChart, False = show other Panel
*/
public void changePanel(boolean showFX){
if(showFX){ //Show FX Chart
if(!pnContent.equals(pn1)){
remove(pnContent);
pnContent = pn1;
add(pnContent);
}
}else{ //Show other Panel
if(!pnContent.equals(pn2)){
remove(pnContent);
pnContent = pn2;
add(pnContent);
}
}
}
问题: 它将显示在启动时罚款。但是,当切换到pn2然后返回到pn1时,pn1内部的JFXPanel将不会显示。
我得到了它由内而外PN1回顾myFXPanel.setStage(新阶段(myJFXChart))工作。然而,这总是抛出一个IllegalArgumentsException,...“已经设置为另一个场景的根目录”。 - 它的工作,但我认为有例外飞行是丑陋的坏习惯。
烦人,处理这个异常的任何企图将导致面板中不再显示出来。 这包括:
JFXPanel myFXPanel = new JFXPanel();
LineChart<Number, Number> chart;
....
//Inside reload method
//With parts inside then outside Platform.runLater(new Runnable()) {...}
myFXPanel.invalidate();
myFXPanel.removeAll();
try{
setStage(newStage(chart));
}catch(Exception ex){}
而不是发布您的问题的解决编辑的问题,并删除它,而是发表您的解决方案作为一个答案,并标记它是正确的。请参阅[我能回答自己的问题吗?](http://meta.stackexchange.com/questions/17463/can-i-answer-my-own-questions-even-those-where-i-knew-the-answer - 询问) – jewelsea
一个bug。。我不确定是否允许我这样做。 根据要求更改。 – djpalme