我正在尝试向JPanel添加多个组件,但只显示最近添加的组件。
似乎问题是布局一次只能处理1个组件,但我对如何实际修复它感到茫然。我已经尝试将组件添加到单独的面板,然后将其添加到主面板,我尝试了几种不同的布局无济于事。
这是相关代码,我目前正在尝试在面板上获得两个扩展JComponent的TextRects:
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();
}
任何帮助都将不胜感激。
编辑:
当用户按下“生成UML”按钮时,从控制器中的ActionListener调用generateUML:
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);
}
答案 0 :(得分:1)
试试这个
panel.add(new TextRect(content.get(0), 10, 10), BorderLayout.SOUTH);
panel.add(new TextRect(content.get(0), 100, 100), BorderLayout.CENTER);
panel.revalidate();
panel.reapint()
如果设置BorderLayout,则应使用其属性。此外,在调用revalidate()之后,您应该调用repaint();
另一个选项是GridLayout
panel = new JPanel(new GridLayout(1, 2)); // or 2, 1 depending if you want them
// laid out vertically or horizontally
panel.add(new TextRect(content.get(0), 10, 10));
panel.add(new TextRect(content.get(0), 100, 100));
答案 1 :(得分:0)
您正在使用BorderLayout面板。 add方法将添加到面板的中心,并将扩展北,南,东和西没有用完的大小。也许您正在寻找只将组件放在一起的FlowLayout。 BorderLayout的任何部分中只能出现一个组件。因此,如果向中心添加两个组件,则只有最后一个组件可见。