将JPanel实例化为SwingNode JavaFX初始化时,如何修复未声明的JPanel

时间:2019-01-11 00:44:30

标签: swing javafx

我的代码有问题。我有一个自定义节点(JPanel),称为圆形面板。我的目标是为JavaFx节点使用嵌入到SwingNode中的此自定义节点,该用法在JavaFx线程上运行的控制器类上的initializeizable方法中实例化。

我试图将组件设置到SwingNode中,但在调用时似乎未初始化(空)。此外,尝试从控制器构造函数方法对其进行初始化,但没有进行任何操作。

public class ApplicationController implements Initializable{
  private RoundedPanel Round_Panel; //NOT FX (SWING JPanel)
  @FXML
  private SwingNode swing_Node; // FX SWINGNODE

      @Override
      public void initialize(URL location, ResourceBundle resources) {
        createAndSetSwingComponents(swing_Node);        
      } //END OF INITIALIZABLE

  public ApplicationController() {
     //ALSO TRIED TO INITIALIZE Round_Panel THROUGH CONSTRUCTOR
       Round_Panel = new RoundedPanel(Color.orange);
      }

  private void createAndSetSwingComponents(final SwingNode Node) {
SwingUtilities.invokeLater(new Runnable() {
 @Override
         public void run() {
            Round_Panel = new RoundedPanel(Color.orange);
            Node.setContent(Round_Panel);
         }
    });
}//END OF SWING METHOD

}//END OF CLASS]

这是RoundedPanel类

    public class RoundedPanel
  extends JPanel
{
  private static final long serialVersionUID = 1L;
  protected int strokeSize = 1;
  protected Color shadowColor = Color.LIGHT_GRAY;
  protected boolean shady = true;
  protected boolean highQuality = true;
  protected Dimension arcs = new Dimension(20, 20);
  protected int shadowGap = 5;
  protected int shadowOffset = 4;
  protected int shadowAlpha = 150;
  Color Fondo;

  public RoundedPanel(Color Fondo)
  {
    this.Fondo = Fondo;
    setOpaque(false);
  }

  protected void paintComponent(Graphics g)
  {
    super.paintComponent(g);
    int width = getWidth();
    int height = getHeight();
    int shadowGap = this.shadowGap;
    Color shadowColorA = new Color(shadowColor.getRed(),         
    shadowColor.getGreen(), shadowColor.getBlue(), shadowAlpha);
    Graphics2D graphics = (Graphics2D)g;
   if (highQuality)
    {
  graphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING, 
    RenderingHints.VALUE_ANTIALIAS_ON);
    }

    if (!shady)
    {
  shadowGap = 1;
    }

  graphics.setColor(Fondo);
  graphics.fillRoundRect(0, 0, width - shadowGap, 
  height - shadowGap, arcs.width, arcs.height);
  graphics.setColor(getForeground());
  graphics.setStroke(new BasicStroke(strokeSize));
  graphics.drawRoundRect(0, 0, width - shadowGap, 
  height - shadowGap, arcs.width, arcs.height);
  graphics.setStroke(new BasicStroke());
  }
}

还尝试首先将其初始化为静态节点,并将其等于结束节点,但仍然不是正确的答案。 编辑: 同样,当在同一类的其他方法中初始化后尝试使用Round_Panel时,其也为null。

0 个答案:

没有答案