JavaFXを参考書で勉強しています。以下のプログラムでエラーが出ているところは
エラーメッセージで分かったのですが、修正の仕方が分かりません。
どなたか、教えていただけませんか。よろしくお願いいたします。
package application; import java.awt.ScrollPane; import java.io.File; import java.nio.file.Paths; import javafx.application.Application; import javafx.geometry.Insets; import javafx.print.PrinterJob; import javafx.scene.Scene; import javafx.scene.canvas.Canvas; import javafx.scene.canvas.GraphicsContext; import javafx.scene.control.Label; import javafx.scene.control.Menu; import javafx.scene.control.MenuBar; import javafx.scene.control.MenuItem; import javafx.scene.image.Image; import javafx.scene.layout.VBox; import javafx.stage.FileChooser; import javafx.stage.Stage; public class PrintImage extends Application { Canvas canvas = new Canvas(); Label lblStatus = new Label(""); PrinterJob job = null; void fileOpen(Stage stage) { FileChooser fc = new FileChooser(); // ファイル選択ダイアログは、javafx.stage.FileChooserを使用します。 // FileChooser のインスタンスを生成します。 fc.getExtensionFilters().addAll( new FileChooser.ExtensionFilter("Text Files", "*.txt"), // ファイル名拡張子に基づいてFileDialogで選択できるファイルを // フィルタリングするために使用する、拡張子フィルタを定義します。 new FileChooser.ExtensionFilter("Java Files", "*.txt"), // 指定された説明とファイル名拡張子を持つExtensionFilterを作成します。 new FileChooser.ExtensionFilter("All Files", "*.txt")); // All Files - フィルタのテキスト説明 // *.txt - 受け入れるファイル名拡張子 File file = fc.showSaveDialog(stage); // ファイル保存は、初期ファイル名をsetInitialFileNameで設定して // showOpenDialogの代わりにshowSaveDialogを呼びます。 // ファイル出力ダイアログを表示するには // FileChooserクラスのshowSaveDialogメソッドを使います。 // ボタンのクリックイベントでshowSaveDialogメソッドを使って // ダイアログを表示し、指定した出力ファイルの絶対パスを // showSaveDialogメソッドの戻り値として受け取ります。 // showSaveDialogメソッドの引数はjavafx.stage.Stageに // なっているため、ここではこのアプリのstageを渡しています。 // (nullでも問題ない)。また、出力ファイル指定ダイアログが // 閉じるまで後続の処理は実行されません。 if (file.isFile()) { lblStatus.setText(file.getAbsolutePath()); GraphicsContext gc = canvas.getGraphicsContext2D(); // イメージを描く System.out.println(file.getAbsolutePath()); String URL = file.getAbsolutePath(); Image img = new Image(Paths.get(URL).toUri().toString()); gc.drawImage(img, 0, 0); } } @Override public void start(Stage stage) throws Exception{ stage.setTitle("PrintText"); // setTitleメソッドを使ってファイル選択ダイアログのタイトルを設定します。 stage.setWidth(360); stage.setHeight(320); MenuBar menuBar = new MenuBar(); // MenuBarコントロールは通常ユーザー・インタフェースの // 最上部に配置され、Menusが内部に組み込まれています。 // メニューをメニュー・バーに追加するには、それを // menus ObservableListに追加します。 // デフォルトでは、メニュー・バーに追加した各メニューは、 // メニューのtext値が表示されたボタンとして表されます。 menuBar.setUseSystemMenuBar(true); // setUseSystemMenuBar(boolean value) // プロパティuseSystemMenuBarの値を設定します。 // MenuBarのメソッド Menu fileMenu = new Menu("ファイル"); // メニューを作るには、MenuBarとMenu、MenuItemを作り、 // MenuBarにMenuを登録、MenuにMenuItemを登録、 MenuItem mnuOpen = new MenuItem("開く"); // mnuOpen.setOnAction(event -> fileOpen(stage)); MenuItem mnuPrintDialog = new MenuItem("印刷設定"); mnuPrintDialog.setOnAction(event -> { if(job == null) job = PrinterJob.createPrinterJob(); // createPrinterJob() ジョブを作成するファクトリ・メソッド。 // PrinterJobのメソッド job.showPrintDialog(stage); }); MenuItem mnuPageSetup = new MenuItem("ページ設定"); mnuPageSetup.setOnAction(event -> { if(job == null) job = PrinterJob.createPrinterJob(); // createPrinterJob() ジョブを作成するファクトリ・メソッド。 // PrinterJobのメソッド job.showPageSetupDialog(stage); }); MenuItem mnuPrint = new MenuItem("印刷"); mnuPrint.setOnAction(event -> { if(job == null) job = PrinterJob.createPrinterJob(); // createPrinterJob() ジョブを作成するファクトリ・メソッド。 // PrinterJobのメソッド job.printPage(canvas); job.endJob(); }); MenuItem mnuExit = new MenuItem("終了"); mnuExit.setOnAction(event -> System.exit(0)); fileMenu.getItems().addAll(mnuOpen,mnuPrintDialog,mnuPageSetup, mnuPrint,mnuExit); menuBar.getMenus().add(fileMenu); canvas.setWidth(360); canvas.setHeight(300); // VBox root = new VBox(); ScrollPane scrl = new ScrollPane(canvas); root.setPadding(new Insets(5,5,5,5)); root.setSpacing(10.0); root.getChildren().addAll(menuBar,scrl, lblStatus); stage.setScene(new Scene(root)); stage.show(); } public static void main(String[] args) { launch(args); } } // エラーメッセージ C:\IdeaProjects\javaFX8_12\src\PrintImage.java エラー:(165, 43) java: 不適合な型: javafx.scene.canvas.Canvasをintに変換できません: エラー:(171, 27) java: インタフェース javafx.collections.ObservableList<E>のメソッド addAllは指定された型に適用できません。 期待値: javafx.scene.Node[] 検出値: javafx.scene.control.MenuBar,java.awt.ScrollPane,javafx.scene.control.Label 理由: 可変引数の不一致: java.awt.ScrollPaneをjavafx.scene.Nodeに変換できません:
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。