Некоторые классы, предпочтительно внутренний класс B, если вы хотите разрешить ввод только с JPanel B, должны реализовать ActionListener. Это ActionListener должен быть добавлен в JTextField:
myInputTextField.addActionListener(theActionListenerIAmGoingToWrite).
Это ActionListener должен определить actionPerformed() что-то вроде этого:
String text = inputTextField.getText();
Integer inputInteger = Integer.getInteger(text).toInt();
graph.doStuffWithIntegerInput(inputInteger);
Конструктивные вопросы, требующие ответа являются:
ли ActionListener анонимный внутренний класс? Если вы собираетесь использовать его только с конкретными экземплярами графа и B, которые знают друг о друге, тогда идите этим путем. Если это так, он должен получить ссылку на экземпляр Graph из его содержащего класса, что подразумевает, что B имеет такой экземпляр, чтобы предложить его.
Является ли действие ActionListener многоразовым в другом месте? Будет ли виджет «вводить числа» появляться в другом месте на других JPanels? Если это делает его самостоятельным классом. Вам по-прежнему нужна ссылка на график, чтобы либо график был как параметр constrcutor, либо/или иметь метод setGraph, потому что каким-то образом он должен знать о экземпляре графа, чтобы он мог отправить ему сообщение.
сделано!
редактировать 2
ОК так давайте карту, что вы должны в рамках MVC. Таким образом, ваше представление состоит из класса Graph и вашего класса B и ваших текстовых полей.
Теперь, содержащийся в вашем классе графа, у вас также есть данные, которые вы хотите отобразить. Это начальные, конечные, x, y переменные, которые вы определили. Чтобы быть хорошим гражданином MVC-земли, вам придется вытащить их и содержать в отдельном объекте b/c, они составляют модель вашего графика.Модель - это, по сути, набор фактов, которые вы хотите представить, независимо от того, как они будут представлены, а вид - это весь код, связанный с рисованием на экране.
Таким образом, этот объект модели будет простым объектом данных с геттерами и сеттерами для всех переменных, которые вы определили, и будет передан в объект Graph либо в конструкторе, либо через сеттер объекта Graph.
Создав этот объект GraphData, вы отделили представление, Graph от его модели - объект GraphData.
С помощью более сложного графика вы фактически указываете в GraphModel, какой «вид» объекта Graph вы хотите создать, какие будут имена оси, какую линию вы хотите нарисовать, например, но это слишком много для того, что у вас есть.
OK Итак, теперь у вас есть объекты Graph и GraphData и каким-то образом их собрать.
Далее посмотрим на ваш класс B. Поскольку это JPanel, представление, это, по существу, агрегатор и ведущий его содержащихся представлений. Это будут Graph и JTextFields. Поэтому вы добавляете их так, как вы, указав макет.
Так гипотетический рефакторинга выглядит следующим образом:
Создать главную программу. В этом основном создайте: JTextFields, ActionListener, JPanel (B), Graph и GraphModel.
Связанный GraphModel с графиком.
Связанный график с JPanel.
Associate ActionListener с JJtextField
Associate JTextField с JPanel
Насколько письма ActionListener идет просто сделать свой собственный класс, который легче всего писать и понимать. Таким образом:
public class MyTextFieldListener implements ActionListener
{
private Graph graph;
public MyTextFieldListener(Graph graph)
{
this.graph = graph;
}// construtor
public void actionPerformed (ActionEvent ae)
{
String text = ((JTextField)ae.getSource()).getText();
Integer inputInteger = Integer.getInteger().(text).toInt();
graph.doStuffWithIntegerInput(inputInteger);
} // actionPerformed
}// class
Теперь осложнением может быть, что вы не можете обновить график до тех пор, пока есть информация от всех четырех TextFields. Существуют различные способы изменить этот код, чтобы приспособиться к этому, но это основная идея того, куда вам нужно идти.
HTH
Чтобы разъяснить, что ControlsB должен реализовать прослушиватель действий в отдельном классе, а класс actionlistener должен запрашивать у пользователя значения и передавать или инициировать класс Graph с этими значениями? –
Мне нужно, чтобы xaxis1, xaxis2, yaxis3, yaxis4 в ControlsB.java, которые были введены, но пользователь (как вы можете видеть на загруженной диаграмме) связаны с переменными f, g, yaxis3, yaxis4, найденными на графике. java от ActionListener, который должен быть в другом классе. – Matthew
Просто отправьте объект вашего класса «Graph» классу, который обрабатывает «События», и пусть этот класс вызывает метод 'setValues ()' вашего класса «Graph», каждый раз, когда вы изменяете значение, последний оператор этот метод 'setValues ()' будет 'repaint()', поэтому при каждом изменении значения он перекрасит 'JPanel' :-) –