加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

从Swing转换为JavaFX?

发布时间:2020-12-15 04:32:55 所属栏目:Java 来源:网络整理
导读:将Swing项目转换为 JavaFx项目时,JavaFx中的哪些类与Swing类匹配? 1-1比赛是最好的. 我不是在寻找与Swing的集成,而是一个彻底的改造. 解决方法 以下是一些基本类: 秋千 – 了JavaFx JFrame – 应用与实施Stage(如果在主类中扩展JFrame,可以使用Application
将Swing项目转换为 JavaFx项目时,JavaFx中的哪些类与Swing类匹配?

1-1比赛是最好的.

我不是在寻找与Swing的集成,而是一个彻底的改造.

解决方法

以下是一些基本类:

>秋千 – >了JavaFx
> JFrame – >应用与实施Stage(如果在主类中扩展JFrame,可以使用Application.launch()来启动扩展Application的那个). Stage是显式JavaFx,是创建Window所必需的.您将需要使用它的实例,而不是JFrame的实例.
> JPanel – >场景&窗格(场景与JPanel匹配,但你的类应该扩展窗格.然后从窗格构建一个场景.窗格是JavaFX中的布局)
> JButton – >按键
> JLabel – >标签
>在许多情况下,删除J将起到作用……
> JOptionPane – >对话(但不总是)
> ActionListener – >事件处理程序< ActionEvent>)(需要在JavaFx中为您需要的每个动作创建一个新的方法/类,与Swing的一个方法完全相同)

Swing示例(我制作的游戏的基本界面)

public class Interface extends JFrame {

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

private CardLayout layout;
private JPanel manager;
private Introduction start;
private MainDisplay display;

public Interface() {
    super("Demo");
    this.setDefaultCloSEOperation(JFrame.EXIT_ON_CLOSE);
    this.setMinimumSize(new Dimension(750,500));
    this.setPreferredSize(new Dimension(750,500));
    this.setMaximumSize(new Dimension(750,500));

    setUp();

    this.pack();
    this.setVisible(true);
}

private void setUp() {
    layout = new CardLayout();
    manager = new JPanel(layout);
    this.add(manager);

    start = new Introduction();
    manager.add(start,INTRODUCTION);

    display = new MainDisplay();
    manager.add(display);

    layout.show(manager);
}

public class Introduction extends JPanel implements ActionListener {

    private static final int LOAD = 0;
    private static final int SAVE = 1;
    private JButton start;
    private JButton toGame;
    private JButton load;
    private JButton save;
    private JButton exit;

    public Introduction() {
        setUp();
    }

    private void setUp() {
        SpringLayout manager = new SpringLayout();
        this.setLayout(manager);

        JLabel title = new JLabel("Demo");
        title.setFont(new Font(Font.SERIF,Font.BOLD,60));
        manager.putConstraint(SpringLayout.HORIZONTAL_CENTER,title,SpringLayout.HORIZONTAL_CENTER,this);
        manager.putConstraint(SpringLayout.NORTH,10,SpringLayout.NORTH,this);
        this.add(title);

        start = new JButton("New Game");
        start.setFont(new Font(Font.SERIF,Font.PLAIN,16));
        start.addActionListener(this);
        manager.putConstraint(SpringLayout.HORIZONTAL_CENTER,start,-250,50,SpringLayout.SOUTH,title);
        this.add(start);

        toGame = new JButton("Continue");
        toGame.setFont(new Font(Font.SERIF,16));
        toGame.addActionListener(this);
        toGame.setEnabled(false);
        manager.putConstraint(SpringLayout.HORIZONTAL_CENTER,toGame,start);
        this.add(toGame);

        load = new JButton("Load Game");
        load.setFont(new Font(Font.SERIF,16));
        load.addActionListener(this);
        manager.putConstraint(SpringLayout.HORIZONTAL_CENTER,load,toGame);
        this.add(load);

        save = new JButton("Save Game");
        save.setFont(new Font(Font.SERIF,16));
        save.addActionListener(this);
        save.setEnabled(false);
        manager.putConstraint(SpringLayout.HORIZONTAL_CENTER,save,load);
        this.add(save);

        exit = new JButton("Exit Game");
        exit.setFont(new Font(Font.SERIF,16));
        exit.setToolTipText("Saves the current game,and exits the program.");
        exit.addActionListener(this);
        manager.putConstraint(SpringLayout.HORIZONTAL_CENTER,exit,save);
        this.add(exit);
    }

    private void perform(int option) {
        JFileChooser chooser = new JFileChooser();
        chooser.setFileFilter(new TextFileFilter());
        if (option == LOAD) {
            int choice = chooser.showDialog(this,"Load Game");
            if (choice == JFileChooser.APPROVE_OPTION)
                chooser.getSelectedFile();
        } else if (option == SAVE) {
            int choice = chooser.showDialog(this,"Save Game");
            if (choice == JFileChooser.APPROVE_OPTION)
                chooser.getSelectedFile();
        }
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        if (display.isRunning()) {
            if (e.getSource() == start || e.getSource() == load) {
                String verify = "A game is currently running.  Are you sure you want to start a new game?"
                        + "rnAny previous game data will be deleted.";
                int choice = JOptionPane.showConfirmDialog(this,verify,"New Game - Warning",JOptionPane.YES_NO_OPTION,JOptionPane.WARNING_MESSAGE);

                if (choice == JOptionPane.NO_OPTION)
                    return;
            }
        }

        if (e.getSource() == start) {
            display.start();
            layout.show(manager,MAIN_DISPLAY);
            toGame.setEnabled(true);
            save.setEnabled(true);
        } else if (e.getSource() == toGame)
            layout.show(manager,MAIN_DISPLAY);
        else if (e.getSource() == load)
            perform(LOAD);
        else if (e.getSource() == save)
            perform(SAVE);
        else if (e.getSource() == exit) {
            perform(SAVE);
            Interface.this.setVisible(false);
            Interface.this.dispose();
        }
    }

}

public class MainDisplay extends JPanel implements ActionListener {

    private static final long serialVersionUID = 1L;
    private boolean running;
    private JButton overview;
    private JButton map;
    private JButton ranking;
    private JButton reports;
    private JButton home;

    public MainDisplay() {
        running = false;
        setUp();
    }

    public boolean isRunning() {
        return running;
    }

    private void setUp() {
        SpringLayout manager = new SpringLayout();
        this.setLayout(manager);

        ranking = new JButton("Ranking");
        ranking.setFont(new Font(Font.SERIF,10));
        ranking.addActionListener(this);
        manager.putConstraint(SpringLayout.HORIZONTAL_CENTER,ranking,this);
        this.add(ranking);

        map = new JButton("Map");
        map.setFont(new Font(Font.SERIF,10));
        map.addActionListener(this);
        manager.putConstraint(SpringLayout.EAST,map,-10,SpringLayout.WEST,ranking);
        manager.putConstraint(SpringLayout.NORTH,this);
        this.add(map);

        overview = new JButton("Overview");
        overview.setFont(new Font(Font.SERIF,10));
        overview.addActionListener(this);
        manager.putConstraint(SpringLayout.EAST,overview,map);
        manager.putConstraint(SpringLayout.NORTH,this);
        this.add(overview);

        reports = new JButton("Reports");
        reports.setFont(new Font(Font.SERIF,10));
        reports.addActionListener(this);
        manager.putConstraint(SpringLayout.WEST,reports,SpringLayout.EAST,this);
        this.add(reports);

        home = new JButton("Home");
        home.setFont(new Font(Font.SERIF,10));
        home.addActionListener(this);
        manager.putConstraint(SpringLayout.WEST,home,reports);
        manager.putConstraint(SpringLayout.NORTH,this);
        this.add(home);
    }

    public void start() {
        running = true;
    }

    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == home) {
            layout.show(manager,INTRODUCTION);
        }
    }

}

public static final class TextFileFilter extends FileFilter {

    private static final String FILE_EXTENSION = "tra";

    @Override
    public boolean accept(File f) {
        if (f.isDirectory())
            return true;
        if (f.getName().toLowerCase().endsWith(FILE_EXTENSION))
            return true;
        return false;
    }

    @Override
    public String getDescription() {
        return "Demo";
    }
}

}

JavaFx示例(几乎与JavaFx中的示例相同)

public class Interface extends Application {

public static void main(String[] args) {
    Application.launch(Interface.class,args);
}

private static final int WIDTH = 750;
private static final int HEIGHT = 500;
private static Stage stage;
private static Introduction start;
private static MainDisplay display;
private static Scene startScene;
private static Scene displayScene;

public Interface() {
    start = new Introduction();
    display = new MainDisplay();
    startScene = new Scene(start,WIDTH,HEIGHT);
    displayScene = new Scene(display,HEIGHT);
}

@Override
public void start(Stage primaryStage) throws Exception {
    Interface.stage = primaryStage;

    stage.setTitle(Constants.TITLE);
    stage.setResizable(false);
    stage.setWidth(WIDTH);
    stage.setHeight(HEIGHT);

    stage.setScene(startScene);
    stage.show();
}

public class Introduction extends BorderPane {

    private static final int LOAD = 0;
    private static final int SAVE = 1;
    private Button toGame;
    private Button save;
    public Introduction() {
        setUp();
    }

    private void setUp() {

        this.setBackground(
                new Background(new BackgroundFill(Color.BLACK,null,null)));

        VBox menu = new VBox();
        menu.setSpacing(10);

        Label title = new Label(Constants.TITLE.toUpperCase());
        title.setFont(Font.font("Arial",FontWeight.THIN,60));
        title.setTextFill(Color.RED);
        menu.getChildren().add(title);

        int btnWidth = 300;
        Background menuBkg = new Background(new BackgroundFill(null,null));
        Border menuBorder = new Border(new BorderStroke(Color.RED,BorderStrokeStyle.SOLID,new CornerRadii(10),null));

        Button start = new Button(Constants.START.toUpperCase());
        start.setFont(Font.font("Times New Roman",16));
        start.setTextFill(Color.WHITE);
        start.setPrefWidth(btnWidth);
        start.setBackground(menuBkg);
        start.setBorder(menuBorder);
        start.setOnAction(new StartHandler());

        toGame = new Button(Constants.CONTINUE.toUpperCase());
        toGame.setFont(Font.font("Times New Roman",16));
        toGame.setTextFill(Color.WHITE);
        toGame.setPrefWidth(btnWidth);
        toGame.setBackground(menuBkg);
        toGame.setBorder(menuBorder);
        toGame.setDisable(true);
        toGame.setOnAction(new ContinueHandler());

        Button load = new Button(Constants.LOAD.toUpperCase());
        load.setFont(Font.font("Times New Roman",16));
        load.setTextFill(Color.WHITE);
        load.setPrefWidth(btnWidth);
        load.setBackground(menuBkg);
        load.setBorder(menuBorder);
        load.setOnAction(new LoadHandler());

        save = new Button(Constants.SAVE.toUpperCase());
        save.setFont(Font.font("Times New Roman",16));
        save.setTextFill(Color.WHITE);
        save.setPrefWidth(btnWidth);
        save.setBackground(menuBkg);
        save.setBorder(menuBorder);
        save.setDisable(true);
        save.setOnAction(new SaveHandler());

        Button ranking = new Button(Constants.RANKING.toUpperCase());
        ranking.setFont(Font.font("Times New Roman",16));
        ranking.setTextFill(Color.WHITE);
        ranking.setPrefWidth(btnWidth);
        ranking.setBackground(menuBkg);
        ranking.setBorder(menuBorder);
        ranking.setOnAction(new RankingHandler());

        Button exit = new Button(Constants.EXIT.toUpperCase());
        exit.setFont(Font.font("Times New Roman",16));
        exit.setTextFill(Color.WHITE);
        exit.setPrefWidth(btnWidth);
        exit.setBackground(menuBkg);
        exit.setBorder(menuBorder);
        exit.setTooltip(new Tooltip(Constants.EXIT_TOOLTIP));
        exit.setOnAction(new ExitHandler());

        menu.getChildren().addAll(start,exit);
        menu.setAlignment(Pos.CENTER);
        this.setCenter(menu);
    }

    private void performIO(int option) {
        FileChooser chooser = new FileChooser();
        ExtensionFilter ext = new ExtensionFilter(Constants.EXT_DESCRIPTION,".pt");
        chooser.setSelectedExtensionFilter(ext);
        if (option == LOAD) {
            chooser.setTitle(Constants.LOAD);
            File choice = chooser.showOpenDialog(stage);
        } else if (option == SAVE) {
            chooser.setTitle(Constants.SAVE);
            File choice = chooser.showSaveDialog(stage);
        }
    }

    private boolean verifyRestart() {
        Alert alert = new Alert(AlertType.WARNING,Constants.START_WARNING_MESSAGE,ButtonType.YES,ButtonType.NO);
        alert.setTitle(Constants.START_WARNING);
        alert.showAndWait();

        if (alert.getResult() == ButtonType.YES)
            return true;
        return false;
    }

    private class StartHandler implements EventHandler<ActionEvent> {

        @Override
        public void handle(ActionEvent event) {
            if (display.isRunning()) {
                if (!verifyRestart())
                    return;
            }

            display.start();
            stage.setScene(displayScene);
            toGame.setDisable(false);
            save.setDisable(false);
        }

    }

    private class ContinueHandler implements EventHandler<ActionEvent> {

        @Override
        public void handle(ActionEvent event) {
            stage.setScene(displayScene);
        }

    }

    private class LoadHandler implements EventHandler<ActionEvent> {

        @Override
        public void handle(ActionEvent event) {
            if (display.isRunning()) {
                if (!verifyRestart())
                    return;
            }

            performIO(LOAD);
        }

    }

    private class SaveHandler implements EventHandler<ActionEvent> {

        @Override
        public void handle(ActionEvent event) {
            performIO(SAVE);
        }

    }

    private class RankingHandler implements EventHandler<ActionEvent> {

        @Override
        public void handle(ActionEvent event) {
            stage.setScene(displayScene);
        }

    }

    private class ExitHandler implements EventHandler<ActionEvent> {

        @Override
        public void handle(ActionEvent event) {
            performIO(SAVE);
            Platform.exit();
        }

    }

}

public static class MainDisplay extends AnchorPane {

    private boolean running;

    public MainDisplay() {
        running = false;
        tower = new Tower();
        setUp();
    }

    private void setUp() {
        Color blue = new Color(34 / 255,37 / 255,47 / 255,1.0);

        this.setBackground(new Background(new BackgroundFill(blue,null)));

        Background bkg = new Background(new BackgroundFill(null,null));

        Button home = new Button(Constants.HOME);
        home.setFont(Font.font("Times New Roman",10));
        home.setTextFill(Color.WHITE);
        home.setBackground(bkg);
        home.setBorder(menuBorder);
        home.setOnAction(new HomeHandler());
        this.getChildren().add(home);
        AnchorPane.setTopAnchor(home,10.0);
        AnchorPane.setRightAnchor(home,10.0);
    }

    public void start() {
        running = true;
    }

    public boolean isRunning() {
        return running;
    }

    private class HomeHandler implements EventHandler<ActionEvent> {

        @Override
        public void handle(ActionEvent event) {
            stage.setScene(startScene);
        }

    }

}

}

警告:对于JavaFx的本质,一些比赛可能并不理想,但他们会做的工作

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读