Я пишу простой пользовательский интерфейс, чтобы разобраться. У меня есть окно с вкладками с двумя вкладками, в одной есть кнопка, которая подсчитывает целое число, а в другой есть текстовое поле, показывающее содержимое указанного целого числа. По крайней мере, таков план.
Все работает просто отлично, если я запихну все в один класс. Я могу получить доступ к вкладке 1 из моего списка действий и изменить текстовое поле на вкладке 1 нажатием кнопки на вкладке 2. Но я, очевидно, не хочу, чтобы вся моя программа находилась в одном классе.
И здесь я понятия не имею, что делать: мне нужно сказать, чтобы текстовое поле в Class Tab1 менялось при нажатии кнопки в Class Tab2. Что тут делать правильно? Моей первой мыслью было передать экземпляр Tab1 при создании Tab2, чтобы я мог выполнить tab1.changeText(). Но это быстро станет беспорядочным, как только я получу больше вкладок, которые взаимодействуют друг с другом. Итак, вместо этого я хочу обновлять содержимое первой вкладки каждый раз, когда она открывается, но я не знаю, как это сделать. И я тоже не знаю, правильно ли это. Итак, помогите!
Вот код. «content» — это экземпляр Content, класс, обрабатывающий всю логику, например добавление к счетчику.
Основной класс графического интерфейса:
public class GUI extends JFrame {
//Stuff..
JTabbedPane tabs = new JTabbedPane();
tabs.addTab("One", new Tab1(content));
tabs.addTab("Two", new Tab2(content));
//Stuff..
Вкладка 1:
public class Tab1 extends JPanel {
public Tab1(Content content) {
JPanel tab1 = new JPanel();
//Stuff..
JTextField tfCount = new JTextField(content.getCounter(), 10);
tab1.add(tfCount);
this.add(tab1);
//Stuff..
Вкладка 2:
public class Tab2 extends JPanel {
public Tab2(Content content) {
JPanel tab2 = new JPanel();
//Stuff..
JButton btnCount2 = new JButton("Count");
btnCount2.addActionListener(new TestListener(this.content));
tab2.add(btnCount2);
this.add(tab2);
}
private class TestListener implements ActionListener {
Content content;
public TestListener(Content content) {
this.content = content;
}
@Override
public void actionPerformed(ActionEvent e) {
this.content.addToCounter(1);
}
}
Теперь, если бы все это было в одном классе (плюс подклассы), я мог бы просто получить доступ к tfCount из Tab2 и выполнить tfCount.setText(content.getCounter());. Однако теперь tfCount находится в другом классе, и я не могу получить к нему доступ, если не передам экземпляр Tab1 в Tab2 (например, tabs.addTab("Two", new Tab2(content, Tab1);). Не мог бы я вместо этого заставьте Tab1 перекрашивать себя всякий раз, когда он открывается, например, иметь метод, который выполняет tfCount.setText(content.getCounter()) в Tab1 всякий раз, когда он открывается, или что-то в этом роде?Если да, то как мне это сделать?
Getters
иSetters
? - person PM 77-1   schedule 07.05.2013