как добавить элементы в список из другого класса в NetBeans - PullRequest
0 голосов
/ 01 декабря 2010

Я хотел бы добавить элементы в список на jframe из другого класса, но, похоже, он не работает, независимо от того, что я пытаюсь ... Я не получаю сообщение об ошибке или какой-либо обратной связи по поводу того, что не так с это ... но вот макет у меня есть, список использует DefaultListModel lm2

Я знаю, как добавить элементы в jList в классе jframe, но по какой-то причине я не могу добавить элементы из другого класса, даже когда добавляю это внутри класса jframe:

  public void log(String str) {
      lm2.addElement(str);
    }

и на моем "другом классе"

  frmMain doit = new frmMain();

  doit.log("add to list box");
#

Подробнее add- --->

#

У меня есть 3 класса, и вот они все:

frmMain.class

  // jFrame class which builds the jframe (from jframe template)
    public class frmMain extends javax.swing.JFrame {

        /** Creates new form frmMain */
        public frmMain() {
            initComponents();
        }



        public void log(String str) {
          lm2.addElement(str);
        }



         public DefaultListModel lm2 = new DefaultListModel();
    }

RequestInfo.class

// RequestInfo.class, which is trying to add an item to the 
// jlist but it doesn't add anything or error

public class RequestInfo {

  public void ProcessReturnedInfo(String sData, boolean bWithLabel) {


            frmMain fm = new frmMain();
            fm.log("test test");



}

RS232Example.class

     // My main class which sets the jFrame to visible
  public class RS232Example {
      public static void main(String[] args) throws Exception {


        frmMain form = new frmMain();
        form.setVisible(true);

    }

  }

Я понимаю, что, возможно, мне нужно установить видимую форму в RequestInfo.class, однако я не могу этого сделать, потому что она будет непрерывно открывать форму несколько раз, потому что этот метод класса вызывается несколько раз из события. .

Ответы [ 2 ]

2 голосов
/ 03 декабря 2010

, если ваша listBox-модель установлена ​​правильно (например, listBox.setModel(this.lm2);), я думаю, должно работать следующее:

public static void main(String[] args) throws Exception {
  frmMain form = new frmMain();
  form.setVisible(true);
  form.log("Hallo");
}

Если вам интересно, почему это работает, а код внутри RequestInfo - нет, оставайтесь вимейте в виду, что вы создаете новый frmMain со своим собственным listModel для каждого вызова ProcessReturnedInfo

Если вы хотите, чтобы обновлялся только один кадр, попробуйте использовать кадр как синглтон:конструктор frmMain из публичного в приватный и добавить это к классу:

private static frmMain instance = null;

public static frmMain getInstance() {
  if (instance == null) {
    instance = new frmMain();
  }
  return instance;
}

Вместо вызова new frmMain() теперь вы должны использовать frmMain.getInstance() в RequestInfo и RS232Example

Так вы всегда будете работать с одним кадром.

Удачи.

0 голосов
/ 01 декабря 2010

Какой у тебя второй класс?Я предполагаю, что frmMain() создает JFrame с JList в нем, но если это JFrame также не станет видимым, вы его не увидите.Я подозреваю - и я могу ошибаться - что у вас есть более одного экземпляра JFrame, и строка добавляется к тому, который не делается видимым.

Извините, что некоторое время болел, но я верюАндреас Л имеет правильный ответ на вашу проблему.Вам не обязательно нужен статический фрейм, но это самый простой способ.У вас также могут возникнуть проблемы, если вы обрабатываете несколько потоков, и в этом случае вам понадобятся способы управления обработкой запросов, очередей данных, которые вы еще не завершили, и т. Д.

Удачи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...