我想將多個組件添加到JPanel,但只顯示最近添加的組件。如何將多個JComponents添加到JPanel?
看起來問題是佈局一次只能處理1個組件,但我對如何實際修復它不知所措。我嘗試將組件添加到單獨的面板,然後將其添加到主面板,並嘗試了幾種不同的佈局,但無濟於事。
下面是相關的代碼,我目前正試圖只拿到兩個TextRects,其擴展JComponent的,面板上:
public class ProjectView extends JFrame implements IProjectView, Observer {
private IProjectModel model;
private ProjectController controller;
private JPanel panel;
public ProjectView(IProjectModel model){
this.model = model;
((Observable) this.model).addObserver(this);
controller = new ProjectController(this.model, this);
addWindowListener(controller);
getContentPane().setLayout(new BorderLayout());
populateMenuBar();
panel = new JPanel(new BorderLayout());
getContentPane().add(panel);
pack();
setMinimumSize(getSize());
setExtendedState(JFrame.MAXIMIZED_BOTH);
}
public void generateUML(ArrayList<ArrayList<String>> content){
panel.add(new TextRect(content.get(0), 10, 10));
panel.add(new TextRect(content.get(0), 100, 100));
panel.revalidate();
}
任何幫助,將不勝感激。
編輯:
generateUML從控制器一個ActionListener稱爲當用戶按下 「生成UML」 按鈕:
private void generateUML(){
ArrayList<IClassModel> classes = new ArrayList<IClassModel>();
classes = model.getClasses();
ArrayList<ArrayList<String>> allClasses = new ArrayList<ArrayList<String>> ();
for(int i = 0 ; i < classes.size() ; i++){
classContent = new ArrayList<String>();
classContent.add(classes.get(i).getClassName());
classContent.addAll(classes.get(i).getMethodNames());
classContent.addAll(classes.get(i).getObjectClasses());
allClasses.add(classContent);
}
System.out.println("1: " + allClasses.get(0));
System.out.println("2: " + allClasses.get(1));
view.generateUML(allClasses);
}
'看起來,當我將其更改爲FlowLayout中沒有顯示在all'一樣 - 這可能是因爲你的TextRect組件不會覆蓋的getPreferredSize()方法返回一個適當的尺寸。 – camickr