2013-02-06 99 views
0

我在这里有一些代码,当按下按钮时,我试图扩展JPanel。但是,它仍然处于以前的高度。有没有办法做到这一点,或者它是否固定在它创建时的尺寸上?我可以增加JPanel的大小吗?

public class GUITest extends JFrame { 

    JPanel jp; 
    JButton one; 

    public static void main(String[] args) { 
     new GUITest(); 
    } 

    public GUITest() { 
     initWidgets(); 
    } 

    public void initWidgets() { 
     setSize(250, 250); 
     setTitle("Stretch Panel Example"); 
     setDefaultCloseOperation(EXIT_ON_CLOSE); 
     setLayout(new FlowLayout()); 
     one = new JButton("Click me!"); 
     ActionListener extend = new ActionListener() { 
      @Override 
      public void actionPerformed(ActionEvent e) { 
       for (int i = 0; i < 80; i++) { 
        jp.setPreferredSize(new Dimension(200,(i+70))); 
       } 
       //System.out.println(jp.getHeight()); 
      } 
     }; 
     one.addActionListener(extend); 
     add(one, BorderLayout.NORTH); 
     jp = new JPanel(); 
     jp.setBackground(Color.BLACK); 
     jp.setPreferredSize(new Dimension(200,70)); 
     add(jp, BorderLayout.CENTER); 
     setVisible(true); 
    } 

} 
+0

@HovercraftFullOfEels看的javadoc后,我看到了真正的尊重首选大小....不好回答,对不起,已经删除了它 – fredcrs

回答

3

或者,你可以调用重新验证()上的按钮后点击的JPanel

public void actionPerformed(ActionEvent e) { 
       for (int i = 0; i < 80; i++) { 
        jp.setPreferredSize(new Dimension(200,(i+70))); 
        **jp.revalidate();** 
       } 
       //System.out.println(jp.getHeight()); 
      } 

澄清,一旦更改尺寸,它必须被重新绘制。事情已经改变了,但它并没有被告知要更新改变视觉

+0

这工作!但是,有什么想法,我怎么能让它“滑翔”?我曾尝试在每次迭代中暂时暂停该线程,但似乎并不奏效! – mino

+0

+1 for revalidate()。您不能只是暂停该线程,因为这会阻止GUI重新绘制自己。相反,您需要使用Swing Timer来安排动画。 – camickr

0

您应该使用validate()方法来做到这一点。 我希望我能够帮助!

祝您有美好的一天!

0

试试这个:

jp.setSize(new Dimension(200,(i+70)));

,而不是jp.setPreferredSize(new Dimension(200,(i+70)));

在eachclick规模将这段代码

增加10:

ActionListener extend = new ActionListener() { 
      int count=0; 
      public void actionPerformed(ActionEvent e) { 
        count=count+10; 
        jp.setSize(new Dimension(100+count,70+count)); 
       System.out.println("in listener"); 
      } 
     }; 

还有一件事setPreferredsize是每当组件调用时的默认大小重新进行验证。要更改每个点击setPrefferedSize:

count=count+10; 
       jp.setSize(new Dimension(100+count,70+count)); 
     jp.setPreferredSize(new Dimension(100+count,70+count)); 
相关问题