如何将JavaFX场景函数包含到public static void main中

时间:2015-08-28 10:04:51

标签: java javafx main scene

我想知道是否有可能将JavaFX场景函数包含到

public static void main (String args[]) {
    …
}

public static void mainlaunch(args); helloworld.java JavaFX程序如下所示:

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import static javafx.geometry.HPos.RIGHT;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.PasswordField;
import javafx.scene.control.TextField;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.HBox;
import javafx.scene.paint.Color;
import javafx.scene.text.Font;
import javafx.scene.text.FontWeight;
import javafx.scene.text.Text;
import javafx.stage.Stage;

public class Login extends Application {

    @Override
    public void start(Stage primaryStage) {
        primaryStage.setTitle("JavaFX Welcome");
        GridPane grid = new GridPane();
        grid.setAlignment(Pos.CENTER);
        grid.setHgap(10);
        grid.setVgap(10);
        grid.setPadding(new Insets(25, 25, 25, 25));


        Text scenetitle = new Text("Welcome");
        scenetitle.setId("welcome-text");
     //   scenetitle.setFont(Font.font("Tahoma", FontWeight.NORMAL, 20));
        grid.add(scenetitle, 0, 0, 2, 1);

        Label userName = new Label("User Name:");
        grid.add(userName, 0, 1);

        TextField userTextField = new TextField();
        grid.add(userTextField, 1, 1);

        Label pw = new Label("Password:");
        grid.add(pw, 0, 2);

        PasswordField pwBox = new PasswordField();
        grid.add(pwBox, 1, 2);

        Button btn = new Button("Sign in");
        HBox hbBtn = new HBox(10);
        hbBtn.setAlignment(Pos.BOTTOM_RIGHT);
        hbBtn.getChildren().add(btn);
        grid.add(hbBtn, 1, 4);

        final Text actiontarget = new Text();
        grid.add(actiontarget, 0, 6);
        grid.setColumnSpan(actiontarget, 2);
        grid.setHalignment(actiontarget, RIGHT);
        actiontarget.setId("actiontarget");

        btn.setOnAction(new EventHandler<ActionEvent>() {

            @Override
            public void handle(ActionEvent e) {
               // actiontarget.setFill(Color.FIREBRICK);
                actiontarget.setId("actiontarget");
                actiontarget.setText("Sign in button pressed");
            }
        });

        Scene scene = new Scene(grid, 300, 275);
        primaryStage.setScene(scene);

        scene.getStylesheets().add(
            Login.class.getResource("Login.css").toExternalForm());
        primaryStage.show();
    }

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

我想使用static void main内的所有整个程序,就像java Swing一样,就像下面的程序一样:

import javax.swing.*;
import java.awt.event.*;
import java.awt.*;


public class combotable {
static JFrame frame = new JFrame();
static JButton boton_nuevo=new JButton("nuevo");

public static void main(String[] args){


frame.setSize(400,400);


String[] petStrings={"Bird", "Cat", "Dog", "Rabbit", "Pig"};
//JComboBox comboBox = new JComboBox(petStrings);

JComboBox<String> combo = new JComboBox<>(petStrings);
combo.setSelectedIndex(4);
//comboBox.setSelectedIndex(4);

frame.add(combo, BorderLayout.PAGE_START);

frame.add (boton_nuevo);

boton_nuevo.addActionListener( new ActionListener()
{

 public void actionPerformed(ActionEvent e) 
        {
         String s = (String) combo.getSelectedItem();
          if (s == "Bird")
                         {
                       System.out.println("Se selecciono Bird");
                          }

           if (s== "Cat")
                         {
                       System.out.println("Se selecciono Cat");
                          }
            if (s== "Dog")
                         {
                       System.out.println("Se selecciono Dog");
                          }

            if (s== "Rabbit")
                         {
                       System.out.println("Se selecciono Rabbit");
                          }
               if (s== "Pig")
                         {
                       System.out.println("Se selecciono Pig");
                          }
         }

}
);

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);


}

}

有没有机会这样做?任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:1)

没有。您的Swing示例未正确同步,因为应在event dispatch thread上构建和操作Swing GUI对象 。您的JavaFX Application已正确同步,并且必须在JavaFX application thread上对场景图操作修改为活动对象(已经附加到场景的那些对象)。&#34;您可以覆盖init()进行其他初始化或构建JavaFX对象其他而不是SceneStage