Хорошо, я попытаюсь объяснить это как можно лучше. Я достаточно разбираюсь в Java, но не могу найти логического решения для этого после обширного поиска. Допустим, что у меня есть класс JPanel внутри пакета A, который будет содержать график, который будет нарисован.Перекрашивание JPanel из JCheckBox ActionListener в другом пакете
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 У меня есть 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
}
});
}
Теперь, как я вызываю функцию updateGraph в моем классе DrawGraph без того, чтобы создать новый экземпляр класса DrawGraph? Я знаю, что я не могу сделать метод updateGraph статическим, поскольку repaint() не является статическим. Я чувствую, что должен быть способ сделать это, не перерисовывая таймер или какой-либо другой запутанный и неэффективный метод. Я рассматриваю эту проблему не так? В принципе, мне нужен способ вызвать перерисовку класса DrawGraph из класса actionClient класса JCheckBox. Если этот вопрос не ясен, сообщите мне, чтобы я мог его пересмотреть. Спасибо, ребята, заранее, это мой первый вопрос, но я уже несколько лет использую вас, ребята.
Большое спасибо, так глупо, что я даже не думать об использовании одноэлементных шаблон. Мне пришлось немного изменить ваш ответ для моей реализации, но все тот же принцип. Еще раз спасибо. –