好的,我将尽我所能地尽力解释它。我对Java非常熟练,但经过大量搜索后无法找到合理的解决方案。假设我在包A中有一个JPanel类,它将包含一个将被绘制的图。从另一个包中的JCheckBox ActionListener重画一个JPanel
package A
public class DrawGraph extends JPanel
{
public DrawGraph()
{
}
@Override
public void paintComponent(Graphics g)
{
super.paintComponent(g);
// other stuff
}
public void updateGraph()
{
repaint();
}
}
在包B的内部不同的I类具有JCheckBox的选定应触发图表的重绘在包A.当这个类不初始化DrawGraph类。该课程在其他地方初始化。
package B
public class CheckBoxClass extends JPanel
public CheckBoxClass
{
graphicsCheckBox.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent cb)
{
GUI_Data.graphics = true;
DrawGraph.updateGraph(); // Calls Update Graph function
}
});
}
现在我怎么叫我DrawGraph类updateGraph功能,而无需创建DrawGraph类的新实例?我知道我不能使updateGraph方法成为静态的,因为repaint()不是静态的。我觉得必须有一种方法来做到这一点,而不需要通过定时器或其他复杂而低效的方法进行重新绘制。我是否以错误的方式看待这个问题?基本上我需要一种方法来触发从JCheckBox类actionlistener重绘DrawGraph类。如果这个问题不清楚,请让我知道,所以我可以修改它。先谢谢你们,这是我的第一个问题,但我一直在使用你们几年。
非常感谢你,太傻了,我压根没想到使用单例模式。我不得不稍微修改一下你的答案,但仍然是一样的原则。再次感谢。 –