У меня проблема с моим кодом. У меня есть пользовательский узел (JPanel), называемый закругленной панелью. Моя цель - использовать этот пользовательский узел, встроенный в SwingNode для узлов JavaFx. Использование экземпляра в инициализируемом методе в классе контроллера, выполняемом в потоке JavaFx.
Я попытался установить компонент в 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());
}
}
Также пытался сначала инициализировать его как статический узел и сравнить его с конечным узлом, но все равно не правильный ответ.
EDIT:
Кроме того, при попытке использовать Round_Panel после инициализации в других методах из того же класса, он также равен нулю.