我想创建一个Java面板,用于创建用户单击的对象。由于我的实际应用程序使用MVC方法,我也希望这些对象能够在模型更改时重新绘制自己,并提供更改其属性的菜单。我认为控制x和y位置的最佳方法是采用基于画布的方法,从方法中JPanel调用这些对象的draw paintComponent方法。然而,这只会在画布上绘制形状,并且不会添加对象本身而失去控制对象属性的所有能力。如果有人能告诉我最适合自己想做的事情,我将非常感激。我已经创建了一些示例代码,可以在下面看到。单击时,我希望圆圈改变颜色,这是使用MouseListener实现的(它基本上代表在这个小例子中更改模型属性)。此外,我还想确保放大/缩小仍然适用于任何示例代码/建议可以提供,所以我添加了按钮来放大和缩小对象作为快速测试。import java.awt.*;import java.awt.event.*;import java.awt.geom.*;import javax.swing.*;import java.awt.geom.Ellipse2D;public class Main { public static void main(String args[]) { EventQueue.invokeLater(new Runnable() { @Override public void run() { JFrame frame = new JFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); ExamplePanel panel = new ExamplePanel(); frame.add(panel); frame.pack(); frame.setVisible(true); } }); } //I could not get this to with when it extended JLayeredPane private static class ExamplePanel extends JPanel { private static final int maxX = 500; private static final int maxY = 500; private static double zoom = 1; private static final Circle circle = new Circle(100, 100);顺便说一句,我确实尝试使用JLayeredPane(有用,因为我也喜欢将我的对象分层),但无法让我的对象甚至渲染。我知道它没有默认的布局管理器所以尝试setBounds在构造函数中调用圆圈,但遗憾的是它没有用。我知道使用布局管理器更好,但似乎找不到适合我需求的布局管理器!提前致谢。
2 回答

幕布斯7119047
TA贡献1794条经验 获得超8个赞
我只想补充一点,我修复了缩放问题,而不是以答案建议的方式,而只是通过在ExamplePanelpaintComponent方法中保留应用缩放变换调用的行:
g2.scale(zoom, zoom);
我认为这是最好的实现,因为没有任何组件需要任何关于缩放的知识,它似乎比JLayer我只需要基本的缩放功能要简单得多。
添加回答
举报
0/150
提交
取消