我正在關注Swing教程,並且發現了兩種方法可以使下面的代碼工作。基本上我們正在創建一個框架,並在其中放置按鈕和文本區域。據我所知,他們可以實現相同的功能,但我很好奇底下的區別在哪裏,或者對於大型項目來說是一種更好的方法。Java Swing傳遞類vs匿名類的實例
這是它在本教程中的顯示方式:
public class MainFrame extends JFrame {
private TextPanel textPanel;
private ButtonPanel buttonPanel;
public MainFrame(String title){
this.setTitle(title);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(800,600);
this.setLayout(new BorderLayout());
this.textPanel = new TextPanel();
this.buttonPanel = new ButtonPanel();
this.buttonPanel.setTextListener(new TextListener(){
public void deliverText(String text) {
textPanel.appendText(text);
}
});
this.add(textPanel, BorderLayout.CENTER);
this.add(buttonPanel, BorderLayout.SOUTH);
this.setVisible(true);
}
這是另一種方法,同時與代碼瞎搞,我發現:
public class MainFrame extends JFrame implements TextListener{
private TextPanel textPanel;
private ButtonPanel buttonPanel;
public MainFrame(String title){
this.setTitle(title);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(800,600);
this.setLayout(new BorderLayout());
this.textPanel = new TextPanel();
this.buttonPanel = new ButtonPanel();
this.buttonPanel.setTextListener(this);
this.add(textPanel, BorderLayout.CENTER);
this.add(buttonPanel, BorderLayout.SOUTH);
this.setVisible(true);
}
public void deliverText(String text){
this.textPanel.appendText(text);
}
}
的TextListener是基本上之間進行通信的接口一個按鈕和文本區域,以便按下按鈕時,該按鈕內的文本將出現在文本區域中。
這些方法中的哪一種都被認爲是更好的方法?實際上我有沒有意識到的顯着差異?
對我來說,似乎第二種方法(其中MainFrame實現TextListener)可能是一種更爲昂貴的方式來處理事情,因爲當真正需要的全部內容是關於TextListener的信息時,我們正在傳遞整個MainFrame實例。我想在一個更大的程序中,MainFrame裏面有很多組件,這會開始成爲一個問題。這是考慮它的正確方法嗎?當我傳遞參數「this」是MainFrame創建的浪費內存的副本或者是原始副本引用的相同內存位置?
添加'this'時,您不添加整個'frame',您只需傳遞* reference * ...因此它不會**增加尺寸... –
這裏沒有具體問題 - 你如何設計你的應用程序強烈依賴於你的應用程序的目的 - 如果你只是想通過按下一個按鈕添加一些文本到文本字段,那麼你應該只編碼(第一種方式) - 如果你有其他目的而不是*只是添加文字*也許另一種方法更好。 –