×
Reviews 4.9/5 Order Now

Java Assignment Solution: Building a Music Preview System Program

July 02, 2024
Donna J. Seymour
Donna J.
🇸🇬 Singapore
Java
Donna J. Seymour, PhD in Computer Science from an esteemed Austrian university, with 8 years of experience in Java assignments. Specializing in advanced Java programming and academic mentoring, ensuring robust solutions and student success.
Key Topics
  • Instructions
  • Requirements and Specifications
Tip of the day
Break your Python assignment into smaller tasks and test each part separately. Use meaningful variable names, write comments for clarity, and leverage built-in functions to simplify your code.
News
In 2025, JetBrains Fleet 2.0 introduced AI-powered code completion, while VS Code added advanced AI-driven bug detection and coding assistants, enhancing programming efficiency.

Instructions

Objective

Write a program to create a music preview system in java language.

Requirements and Specifications

Description:

I need help with a java assignment to create a method for JavaFX project I am working on. It is a project that prints a document displayed on a javafx pane. The pane can be long or short depending on input of user. The problem I am having is when the pane height is too long to fit in one page, the printer does not print the rest of it on a second page. Instead it cuts off after 1 page. I need a method that can print the pane on as many pages as needed depending on its height instead of just fitting to one page and cutting off. I have attached the code I have so far. Please scroll to the printHandle() method I made. That is where I need help with.

Source Code

package GUI; import java.io.IOException; import instruments.Guitar; import instruments.Drumset; import javafx.application.Application; import javafx.beans.property.BooleanProperty; import javafx.beans.property.SimpleBooleanProperty; import javafx.fxml.FXML; import javafx.print.PageLayout; import javafx.print.PageOrientation; import javafx.print.Paper; import javafx.print.Printer; import javafx.print.PrinterJob; import javafx.scene.control.Button; import javafx.scene.image.ImageView; import javafx.scene.image.WritableImage; import javafx.scene.layout.AnchorPane; import javafx.scene.layout.Pane; import javafx.scene.transform.Scale; import javafx.scene.transform.Translate; import javafx.stage.Window; import javafx.stage.Stage; import models.ScorePartwise; public class PreviewMusic extends Application{ private MainViewController mvc; @FXML private Pane pane; public Window convertWindow; @FXML private Button printButton; final BooleanProperty printButtonPressed = new SimpleBooleanProperty(false); private ScorePartwise scorePartwise; @FXML private AnchorPane anchorPane; public PreviewMusic() {} @FXML public void initialize() {} public void setMainViewController(MainViewController mvcInput) { mvc = mvcInput; } // We can use this method to update the music sheet public void update() throws IOException { // Get the ScorePartwise object directly scorePartwise = mvc.converter.getScorePartwise(); /* Get the list of measures from the ScorePartwise object. * * We get the list of Parts, there should be only one Part in this list, * so we get the first item, which is the Part, then we get the measures from that Part. */ String instrument = scorePartwise.getPartList().getScoreParts().get(0).getPartName(); if(instrument == "Guitar") { Guitar g = new Guitar(scorePartwise, pane); g.drawGuitar(); } else if (instrument == "Drumset") { Drumset d = new Drumset(scorePartwise, pane); d.draw(); } } @FXML public void printHandle() { printButton.setOnAction( aEvent -> { printButtonPressed.set(true); }); WritableImage screenshot = pane.snapshot(null, null); Printer printer = Printer.getDefaultPrinter(); PageLayout layout = printer.createPageLayout(Paper.A4, PageOrientation.PORTRAIT, Printer.MarginType.DEFAULT); double pagePrintableWidth = layout.getPrintableWidth(); double pagePrintableHeight = layout.getPrintableHeight(); final double scaleX = pagePrintableWidth / screenshot.getWidth(); final double scaleY = pagePrintableHeight / screenshot.getHeight(); final ImageView print_node = new ImageView(screenshot); print_node.getTransforms().add(new Scale(scaleX, scaleX)); PrinterJob printSheet = PrinterJob.createPrinterJob(); if (printSheet != null && printSheet.showPrintDialog(pane.getScene().getWindow())) { double numberOfPages = Math.ceil( scaleX / scaleY); Translate gridTransform = new Translate(0, 0); print_node.getTransforms().add(gridTransform); for(int i = 0; i < numberOfPages; i++) { gridTransform.setY(-i * (pagePrintableHeight / scaleX)); printSheet.printPage(layout, print_node); } printSheet.endJob(); } } @FXML public void playHandle() { ScorePartwise scorePartwise = mvc.converter.getScorePartwise(); String instrument = scorePartwise.getPartList().getScoreParts().get(0).getPartName(); if(instrument == "Guitar") { Guitar g = new Guitar(scorePartwise, pane); g.playNote(); } } // private Window openNewWindow(Parent root, String windowName) { // Stage stage = new Stage(); // stage.setTitle(windowName); // stage.initModality(Modality.APPLICATION_MODAL); // stage.initOwner(MainApp.STAGE); // stage.setResizable(false); // Scene scene = new Scene(root); // stage.setScene(scene); // stage.show(); // return scene.getWindow(); // } public void handleGotoMeasure() {} @Override public void start(Stage primaryStage) throws Exception { // TODO Auto-generated method stub } }

Similar Samples

Explore our sample projects at programminghomeworkhelp.com to see the quality of work we deliver. Our expert programmers handle a wide range of topics and languages, ensuring top-notch, custom solutions tailored to your needs. See how we turn complex problems into simple, elegant code.