package greenfoot.guifx.export;
import static greenfoot.export.Exporter.ExportFunction;
import bluej.Boot;
import bluej.Config;
import bluej.utility.Utility;
import greenfoot.export.mygame.ExportInfo;
import greenfoot.export.mygame.ScenarioInfo;
import java.io.File;
import java.util.Map;
import java.util.stream.Collectors;
import javafx.beans.binding.Bindings;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.control.Button;
import javafx.scene.control.Hyperlink;
import javafx.scene.control.Label;
import javafx.scene.control.TextArea;
import javafx.scene.control.TextField;
import javafx.scene.input.Clipboard;
import javafx.scene.input.DataFormat;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.Pane;
import javafx.stage.Window;
import threadchecker.OnThread;
import threadchecker.Tag;
import javax.swing.SwingUtilities;
| Export dialog's tab for exporting to a standalone application.
|
| @author Michael Kolling
| @author Amjad Altadmri
|
@OnThread(Tag.FXPlatform)
public class ExportAppTab
extends ExportLocalTab{
| Creates a new instance of ExportAppTab
|
| @param parent The window which will host this tab.
| @param scenarioInfo The scenario info needed for different export functions.
| @param scenarioName The name of the scenario to be shared.
| @param defaultExportDir The default directory to select from.
|
public ExportAppTab(Window parent, ScenarioInfo scenarioInfo, String scenarioName, File defaultExportDir)
{
super(parent, scenarioInfo, scenarioName, defaultExportDir, "app", ".jar");
}
@Override
public ExportFunction getFunction()
{
return ExportFunction.APP;
}
@Override
protected void buildContentPane(final File targetFile)
{
super.buildContentPane(targetFile);
String sep = Config.isWinOS() ? ";" : ":";
String javaAndClasspathBefore = "\"" + Config.getJDKExecutablePath(null, "java") + "\" -cp \"" +
Utility.urlsToFiles(Boot.getInstance().getJavaFXClassPath()).stream().map(f -> f.getAbsolutePath()).collect(Collectors.joining(sep)) + sep;
String javaAndClasspathAfter = "\" --module-path \"" + Boot.getInstance().getJavaFXLibDir() + "\" --add-modules=ALL-MODULE-PATH greenfoot.export.GreenfootScenarioApplication";
Hyperlink moreInfo = new Hyperlink(Config.getString("export.app.more"));
moreInfo.setOnAction(event -> SwingUtilities.invokeLater(() -> Utility.openWebBrowser("https://www.greenfoot.org/doc/run_standalone")));
Label commandLineExplanation = new Label("Command to run scenario on this machine:");
TextArea commandLineBox = new TextArea();
commandLineBox.setWrapText(true);
commandLineBox.setEditable(false);
commandLineBox.textProperty().bind(Bindings.concat(javaAndClasspathBefore, targetDirField.textProperty(), javaAndClasspathAfter));
Button copyButton = new Button(Config.getString("editor.copyLabel"));
copyButton.setOnAction(e -> Clipboard.getSystemClipboard().setContent(Map.of(DataFormat.PLAIN_TEXT, commandLineBox.getSelectedText().isEmpty() ? commandLineBox.getText() : commandLineBox.getSelectedText())));
BorderPane.setAlignment(copyButton, Pos.CENTER);
BorderPane.setMargin(copyButton, new Insets(0, 0, 0, 10));
BorderPane borderPane = new BorderPane(commandLineBox, commandLineExplanation, copyButton, moreInfo, null);
((Pane)getContent()).getChildren().addAll(borderPane, lockScenario, hideControls);
}
@Override
protected ExportInfo getExportInfo()
{
ExportInfo info = super.getExportInfo();
info.setLocked(isLockScenario());
info.setHideControls(isHideControls());
return info;
}
}
top,
use,
map,
class ExportAppTab
. ExportAppTab
. getFunction
. buildContentPane
. getExportInfo
91 neLoCode
+ 8 LoComm