В JAVA Swing, когда мы реализуем кнопку JAVAFX с помощью JFXPanel, а затем удаляем jpanel и добавляем его снова, тогда сцена удаляется или скрывается - PullRequest
0 голосов
/ 11 января 2019

У меня есть демонстрационное приложение, в котором я добавляю кнопку JAVAFX в JPanel с помощью JFXPanel и добавляю сцену в JFXPanel. но когда я удаляю и снова добавляю JPanel, в котором реализован мой JFXPanel, сцена удаляется или скрывается внутри JFXPanel, пожалуйста, помогите.

Я также пытался перерисовать () и повторно проверить () JFXPanel и JPanel, но ничего не происходит.

Image 1

Image 2

Image 3

Вот весь код приложения, пожалуйста, помогите.

public class MainForm extends JFrame {
    JButton btnTest;
    JButton button;
    JLabel lblMessage;

    JPanel mainPanel;
    JFXPanel jfxPanel;
    JPanel panel1;
    JPanel panel2;

    public MainForm() {
        initialize();
    }

    private void initialize() {
        setTitle("Touch Screen Test");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setExtendedState(JFrame.MAXIMIZED_BOTH);

        mainPanel = new JPanel();
        mainPanel.setLayout(new MigLayout("insets 10 10 10 10"));

        panel1 = new JPanel();
        panel1.setLayout(new MigLayout("insets 10 10 10 10"));

        panel2 = new JPanel();
        panel2.setLayout(new MigLayout("insets 10 10 10 10"));

        MouseListener listener = new TestButtonListener();
        btnTest = new JButton("Test");
        btnTest.addMouseListener(listener);

        jfxPanel = new JFXPanel();
        jfxPanel.setToolTipText("JFX Panel");
        jfxPanel.setScene(createScene());
        jfxPanel.setPreferredSize(new Dimension(300, 50));

        lblMessage = new JLabel("Your message Here.");
        lblMessage.setFont(new Font("Arial", Font.PLAIN, 80));

        panel1.add(btnTest, "h 50, w 300, push, c, wrap");
        panel1.add(jfxPanel, "h 50, w 300, push, c, wrap");
        panel1.add(lblMessage, "pushx, c");

        button = new JButton("change");
        button.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent arg0) {
                if (button.getText().equals("change")) {
                    mainPanel.remove(panel1);
                    mainPanel.repaint();
                    mainPanel.revalidate();
                    button.setText("changed");
                } else {
                    mainPanel.add(panel1, "push, grow, wrap, cell 0 0");
                    mainPanel.repaint();
                    mainPanel.revalidate();
                    button.setText("change");
                }
            }
        });
        panel2.add(button, "push, align c");

        mainPanel.add(panel1, "push, grow, wrap, cell 0 0");
        mainPanel.add(panel2, "pushx, growx, cell 0 1");
        add(mainPanel);
        setVisible(true);
        setLocationRelativeTo(null);
    }

    class TestButtonListener implements MouseListener {

        @Override
        public void mouseClicked(MouseEvent arg0) {

        }

        @Override
        public void mouseEntered(MouseEvent arg0) {

        }

        @Override
        public void mouseExited(MouseEvent arg0) {

        }

        @Override
        public void mousePressed(MouseEvent arg0) {
            lblMessage.setText("Button pressed");
        }

        @Override
        public void mouseReleased(MouseEvent arg0) {
            lblMessage.setText("Button released");
        }
    }

    public static void main(String[] args) {
        new MainForm();
    }

    @SuppressWarnings("static-access")
    private Scene createScene() {
        VBox vBox = new VBox();
        vBox.setAlignment(Pos.CENTER);

        Scene scene = new Scene(vBox);
        scene.getStylesheets().add(getClass().getResource("res/style.css").toString());

        Button button = new Button("JAVAFX Button");
        button.setPrefSize(300, 50);

        button.setOnTouchPressed(new EventHandler<Event>() {

            @Override
            public void handle(Event event) {
                lblMessage.setText("Button pressed");
            }

        });

        button.setOnTouchReleased(new EventHandler<Event>() {

            @Override
            public void handle(Event event) {
                lblMessage.setText("Button released");
            }

        });

        vBox.getChildren().add(button);

        return scene;
    }

}

1 Ответ

0 голосов
/ 31 января 2019

Наконец-то я нашел ответ на этот вопрос, решение доступно на этом посту

Предотвращение смерти потока JavaFX с помощью взаимодействия JFXPanel Swing?

...