2014-01-14 118 views
0

首先,我不是在尋找解決方案,我問的是什麼是最可接受的方式來做到這一點。 現在我有一個主框架,它有一個繪圖JPanel和一對JScrollPane,用於記錄事物。 我已經把類中的所有日誌相關的視圖,並添加到主框架是這樣的:如何將子視圖添加到其他類的框架?

logViews = new LogViews(this); 

我想我不應該全班添加到對象,但我可以讓別人怎麼工作的呢?我應該擴展主框架還是製作界面? 日誌視圖也需要與主面板進行通信,所以它必須雙向連接。

好了,所以如果不夠明確:

LogViews是一個自定義類我做了,它看起來是這樣的,但更多的JList的:

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

您可以LogViews一個JDialog像這樣

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


編輯的所有字段

,你還可以做什麼,如果你想要的是作爲一個單獨的類,是有一個setter。像

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

和/或幾個方法來添加,然後從列表

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

刪除然後只需調用從MainFrame那些方法。但是對於您的情況,我只需將LogViews一個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

相關問題