好的,我將盡我所能地盡力解釋它。我對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類。如果這個問題不清楚,請讓我知道,所以我可以修改它。先謝謝你們,這是我的第一個問題,但我一直在使用你們幾年。
非常感謝你,太傻了,我壓根沒想到使用單例模式。我不得不稍微修改一下你的答案,但仍然是一樣的原則。再次感謝。 –