2014-01-14 3 views
0

Прежде всего, я не ищу решения, я спрашиваю, что является наиболее приемлемым способом для этого. Теперь у меня есть основной фрейм, который имеет рисунок JPanel и пару JScrollPane только для регистрации вещей. я поставил все точки зрения, связанные с лог в классе и добавляется к основной раме, как это:Как добавить subviews в кадр из другого класса?

logViews = new LogViews(this); 

Я думаю, что я не должен добавить весь класс к объекту, но как еще я могу заставить его работать? Должен ли я расширять основной фрейм или создавать интерфейс? Просмотры журналов также должны связываться с основной панелью, поэтому ее необходимо подключить в обоих направлениях.

ИТАК, если его не достаточно ясно:

LogViews является пользовательский класс я сделал, это выглядит примерно так, но с более JLists:

public class LogViews { 
     private DefaultListModel logModel; 
     private JList<String> logList; 

     public LogViews(MainFrame frame){ 
      logModel = new DefaultListModel(); 
      logList = new JList(); 
      logList.setModel(logModel); 
      JScrollPane logListScroll = new JScrollPane(logList); 
      frame.add(logListScroll, BorderLayout.NORTH); 
     } 
} 

Он работает, я просто интересно, если я может сделать это без добавления MainFrame в конструкторе.

+0

1) Что такое 'LogViews', настраиваемый компонент? 2) _ «пара JScrollPane только для регистрации вещей». _ Что именно это означает? Есть ли в них текстовые области? 3) Как в мире это «logViews = новые LogViews (это)», покажите нам, что вы добавили его в фрейм? –

+0

Я добавил простой пример – Endanke

+0

Итак, в конечном счете, LogViews - это просто 'JList', я прав? И каков был вопрос о том, что вы хотите с этим делать? –

ответ

1

Вы можете сделать LogViewsJDialog что-то вроде этого

public class LogViews extends JDialog { 
    private DefaultListModel logModel; 
    private JList<String> logList; 

    public LogViews(JFrame frame, boolean modal){ 
     super(frame, true); 
     logModel = new DefaultListModel(); 
     logList = new JList(); 
     logList.setModel(logModel); 
     JScrollPane logListScroll = new JScrollPane(logList); 

     setLayout(new BorderLayout()); 
     add(logListScroll); 
     pack(); 
    } 
} 

Вы можете сделать его открытым с одним нажатием кнопки

button.addActionListener(new ActionPerformed(ActionEvent e){ 
    @Override 
    public void actionPerformed(ActionEvent e) { 
     new LogViews(MainFrame.this, true); 
    } 
} 

Что вы можете сделать, чтобы позволить ему «общаться» с MainFrame - это просто внутренний класс, поэтому он имеет доступ ко всем членам класса MainFrame. Помимо этого, трудно предложить полное решение, потому что они внесли большой вклад в то, что нужно сообщить.


Если вы хотите, чтобы появиться в MainFrame, вы можете просто LogViewsJPanel и добавить эту панель в MainFrame. Опять же, имея его в качестве внутреннего класса MainFrame, чтобы он мог получить доступ все поля из MainFrame


EDIT

Что вы можете сделать, если вы хотите, как отдельный класс, это есть a setter. Как

public void setLogModel(DefaultListModel model) { 
    logList.setModel(model); 
} 

и/или пару методов для добавления и удаления из списка

public void addToList(String element) { 
    logModel.addElement(element); 
} 

Тогда просто вызывать эти методы из MainFrame. Но для вашего сценария я бы просто сделал LogViews a JPanel, а не JDialog, и создайте его в MainClass и добавьте его в ваш MainFrame. Что-то вроде

public class LogViews extends JPanel 
    private DefaultListModel logModel; 
    private JList<String> logList; 

    public LogViews(){ 
     logModel = new DefaultListModel(); 
     logList = new JList(); 
     logList.setModel(logModel); 
     JScrollPane logListScroll = new JScrollPane(logList); 

     setLayout(new BorderLayout()); 
     add(logListScroll); 
    } 

    public void addToList(String element) { 
     logModel.addElement(element); 
    } 

    public void setLogModel(DefaultListModel model) { 
     logList.setModel(model); 
    } 
} 
+0

Хорошо, так что если это не проблема, чтобы дать ему рамку, это сработает спасибо! – Endanke

Смежные вопросы