日期:2014-05-20  浏览次数:20704 次

关于BorderLayout布局管理器的奇怪问题
情况是这样的,在初始化阶段,为JFrame的WEST和NORTH分别添加了菜单栏和一棵树,然后点击菜单栏中的按钮出发Action的actionPerformed代码。代码如下
Java code

JTextPane note = new JTextPane();
Dimension parentSize = ((BorderLayout)menuShowPanel.getLayout()).preferredLayoutSize(menuShowPanel);
note.setSize(parentSize);
JScrollPane scrollPane = new JScrollPane(note);
scrollPane.setSize(parentSize);
menuShowPanel.setCurrentNoteCanvas(note);//menuShowPanel就是上面说的JFrame
menuShowPanel.add(scrollPane, BorderLayout.CENTER); //添加到CENTER


但是JTextPane没有按照设计出现在JFrame的CENTER位置,而是出现在坐标为(0,0)的位置。大小也没有按照设计设置。很奇怪,调用JFrame的重绘也不行。怀疑是因为添加了新组件,但是布局管理器没有得到通知,Swing之前没用过,请教大家应该怎么做?

------解决方案--------------------
用JFrame 一般要用container contentPane = this.getContentPane();
用contentPane 作为窗格添加各种JPanel);,并不像你说的//menuShowPanel就是上面说的JFrame 就用menuShowPanel.add(***);
scrollPane好像你这个也没用到
既然使用到BorderLayout 这个布局管理器啦 一般用户设置大小是不行的,特别对于JPanel来说,因为它会根据JFrame大小来布局的!
希望对你有所帮助,本人也是菜鸟一枚。



------解决方案--------------------
你对应的JTextPane note = new JTextPane();
有没有设置成:note.setLayout(new BorderLayout());