我正在创建一个使用Graphics2D和MouseListener在桌面上绘制小应用程序的微型操作系统。
每个应用程序都有自己的实现图形的类,该类具有用于绘制应用程序徽标的代码。 然后,我从主图形类(桌面)调用此图形方法。
不幸的是,这无法正常工作,它只会绘制首先调用的应用程序(例如,如果我先绘制TextEditor Graphics,然后绘制Paint App Graphics,则它只会显示TextEditor)
我认为这可能与创建另一个Graphics2D对象然后使用该对象调用第二个应用程序一样容易。
但是我正在尝试使其对开发人员友好(例如,如果有人想创建自己的应用程序,就像在其应用程序中添加一些方法一样容易并且可以使用),所以我不想添加另一个Graphics2D对象
这是台式机的图形
public void paintComponent(Graphics g) {
Graphics2D g2d = (Graphics2D) g;
this.addMouseListener(this);
//Desktop
g2d.setColor(desktopBackground);
g2d.fillRect(0, 0, this.getWidth(), this.getHeight());
//Draw Applications
SimplePaint.drawApp(g2d);
TextEditor.drawApp(g2d);
g.dispose();
}
这是SimplePaint的图形
public static void drawApp(Graphics g) {
Graphics2D g2d = (Graphics2D) g;
g2d.setColor(MainColor);
g2d.fillOval(AppXloc, AppYloc, Appwidth, Appheight);
g2d.setColor(ComputerGraphics.desktopBackground);
g2d.fillOval(AppXloc + Appwidth / 3, AppYloc + Appheight - 20,
Appwidth / 5, Appwidth / 5);
g2d.setColor(Color.RED);
g2d.fillOval(AppXloc + Appwidth / 10, AppYloc + Appheight / 2,
Appwidth / 4, Appheight / 4);
g2d.setColor(Color.GREEN);
g2d.fillOval(AppXloc + Appwidth / 5, AppYloc + Appheight / 5,
Appwidth / 4, Appheight / 4);
g2d.setColor(Color.BLUE);
g2d.fillOval(AppXloc + Appwidth / 2, AppYloc + Appheight / 9,
Appwidth / 4, Appheight / 4);
g2d.setColor(Color.white);
g2d.drawString(ApplicationName, AppXloc, AppYloc + Appheight +
15);
g2d.dispose();
}
这是TextEditor图形
public static void drawApp(Graphics g) {
Graphics2D g2d = (Graphics2D) g;
g2d.setColor(Color.white);
g2d.fillRect(AppXloc, AppYloc, Appwidth, Appheight);
g2d.setColor(Color.black);
g2d.fillRect(AppXloc + 10, AppYloc + 10, Appwidth - 20,
Appheight - 20);
g2d.setColor(Color.white);
g2d.fillRect(AppXloc, AppYloc + 17, Appwidth, Appheight - 65);
g2d.fillRect(AppXloc, AppYloc + 27, Appwidth, Appheight - 65);
g2d.fillRect(AppXloc, AppYloc + 37, Appwidth, Appheight - 65);
g2d.fillRect(AppXloc, AppYloc + 47, Appwidth, Appheight - 65);
g2d.fillRect(AppXloc, AppYloc + 57, Appwidth, Appheight - 65);
g2d.setColor(Color.white);
g2d.drawString(ApplicationName, AppXloc, AppYloc + Appheight +
15);
g2d.dispose();
}
我希望它可以同时在桌面上显示两个应用程序,但不会