JFugue 没有提供绘制乐谱的 ParserListener,但您可以自己编写!另外,当您编写 ParserListener 时,它适用于任何解析器,因此您还可以为 MIDI 文件和人们拥有 Parser 的其他文件类型绘制乐谱。如果您在这方面取得了很大进展,请考虑将其提交给下一个版本的 JFugue。
这是编写自己的乐谱解析器侦听器的一种方法:
public class ArunavSheetMusicParserListener extends JPanel implements ParserListener {
private List<ThingToDraw> thingsToDraw;
public ArunavSheetMusicParserListener() {
super();
this.thingsToDraw = new ArrayList<>();
}
@Override
public void paint(Graphics g) {
super(g);
for (ThingToDraw thingToDraw : thingsToDraw) {
thingToDraw.draw(g);
}
}
@Override
public void onNoteParsed(Note note) {
thingsToDraw.add(new NoteDrawing(note));
}
...and so on for the other events from ParserListener that you wish to draw...
}
和
public interface ThingToDraw {
public void draw(Graphics g);
}
和
public class NoteDrawing implements ThingToDraw {
private Note note;
public NoteDrawing(Note note) {
this.note = note;
}
public void draw(Graphics g) {
// look at the methods of the note to determine
// how to draw it:
// - note.getDuration()
// - note.getValue()
}
}
并为您计划绘制的其他事物执行此操作。
请注意:MusicXMLParser 由用户社区贡献,并没有像 JFugue 库的其他部分那样维护良好。在您自己的 ParserListener 投入时间之前,请确保 MusicXMLParser 按您的预期工作。并且,请确保您使用的是最新版本的 JFugue,此时为 5.0.9 版。