情况是这样的,在初始化阶段,为JFrame的WEST和NORTH分别添加了菜单栏和一棵树,然后点击菜单栏中的按钮出发Action的actionPerformed代码。代码如下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之前没用过,请教大家应该怎么做?

解决方案 »

  1.   

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

  2.   

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

  3.   


    你好,谢谢你的回复。
    按照你的提示,将代码修改为:JTextPane note = new JTextPane();
    JScrollPane scrollPane = new JScrollPane(note);
    menuShowPanel.setCurrentNoteCanvas(note);
    menuShowPanel.getContentPane().add(scrollPane, BorderLayout.CENTER);在JFrame下就没有任何显示了,JTextPane没有出现在任何位置。如果不嵌套JScrollPane,直接插入JTextPane也是一样的效果。真的是太奇怪了,在JFrame下添加JTextPane组件后,调用一下pack方法才能把JTextPane显示在正确的位置。但是这样会使JFrame的尺寸编程最小的状态。
      

  4.   

    你好,谢谢关注。
    JTextPane是我想放在JFrame中的组件。JFrame已经设置成了BorderLayout布局。作为组件是什么布局管理器应该没有关系的。