Как можно повлиять на данные одного комбинированного списка на другой, которые доступны в двух разных классах в разгаре? - PullRequest
0 голосов
/ 01 декабря 2011

У меня есть два поля со списком в двух разных классах.Мое требование заключается в том, что если я изменяю данные в одном классе, эти данные должны отображаться в другом классе.Есть ли слушатели или какой-то другой способ?Ты можешь мне помочь?

Ответы [ 3 ]

5 голосов
/ 01 декабря 2011

Хотя это программа с графическим интерфейсом, принципы практики ООП Java остаются неизменными.Вы предоставляете один открытый метод (методы) класса set, чтобы другие классы могли изменять его свойства, и позволяете другим классам (обычно «управляющим» классам, таким как класс, слушающий первый JComboBox) вызывать эти методы, вызывая методы setterэкземпляр первого класса.

3 голосов
/ 01 декабря 2011

Вы должны изучить основы принципа модель-представление-контроллер, часто сокращаемого до «MVC».Поле со списком состоит из

  • вида (визуальное представление),
  • контроллера (щелчок по нему открыт, выбор записи) и
  • модели (вв случае с JComboBox это ComboBoxModel ).

Для ваших целей это похоже на то, что вы хотите сделать, это либо

  • shareмодель из двух полей со списком или
  • добавьте ActionListener и / или ItemListener в поле со списком, которое уведомит другое об изменениях.

Помните, что совместно используемая модель также подразумевает, что то, что выбирается в одном поле, выбирается в другом.Модель инкапсулирует статус выбора, а также список элементов.Одним из способов обойти это было бы иметь своего рода модель в модели.Оба комбинированных блока могут иметь свою собственную ComboBoxModel со своим собственным состоянием выбора и тому подобным, но с общей вторичной моделью для списка элементов.Обновления в списке предметов будут видны обоим.Это, однако, подразумевает, что вы реализуете ComboBoxModel сами или подкласс DefaultComboBoxModel способом, который переопределяет поведение по умолчанию.

Я предлагаю вам проверить учебник Swing, а также чтение по шаблону модель-представление-контроллер .

1 голос
/ 01 декабря 2011

Вы можете использовать Объект второго класса, а затем получить доступ к текстовому полю этого класса, установив значение

Sample

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class ComboBox{
  JComboBox combo;
  JTextField txt;
  static ComboBox b1 = null;
  static ComboBox b2 = null;
  public static void main(String[] args) {
  b1 = new ComboBox();
  b2 = new ComboBox();
  }

  public ComboBox(){
  String course[] = {"BCA","MCA","PPC","CIC"};
  JFrame frame = new JFrame("Creating a JComboBox Component");
  JPanel panel = new JPanel();
  combo = new JComboBox(course);
  combo.setBackground(Color.gray);
  combo.setForeground(Color.red);
  txt = new JTextField(10);
  panel.add(combo);
  panel.add(txt);
  frame.add(panel);
  combo.addItemListener(new ItemListener(){
  public void itemStateChanged(ItemEvent ie){
  String str = (String)combo.getSelectedItem();
  b1.txt.setText(str);
  b2.txt.setText(str);
  }
  });
  frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  frame.setSize(400,400);
  frame.setVisible(true);
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...