按下按钮时JFrame会变慢吗?

时间:2012-08-15 19:00:42

标签: java swing jframe jpanel jdesktoppane

下面的代码显示了我的程序,当在方法home(),plus,minus(),times()divide()之间切换时,它们removeAll()对应JPanel } s,addPnl() subPnl()等等 - 这些是JDesktopPane中的商店。

我对Java很陌生,我的代码背后的想法是这样一个数学程序:你按一个按钮,JFrame删除显示的JPanel内容在那一刻,然后显示正确的JPanel,具体取决于你想要的总和类型:加法,乘法等。

我的问题就是,当您翻到菜单,然后转到另一个JPanel,然后来回转换到新屏幕/ {变得越来越慢{1}}。 有没有办法避免这种情况?

我的代码可能有一些不好的做法,但就像我说的那样,我很新,需要学习这些东西!

非常感谢。

我已将JPanel添加到JPanels,因此我可以在JDesktopPane上添加背景图片:

JFrame

不同的按钮链接到不同的方法,所有这些都在我的班级desk.add( bgImg , new Integer( 50 ) ); desk.add( mainPnl , new Integer( 350 ) ); desk.add( mainG , new Integer( 350 ) ); desk.add( addPnl , new Integer( 350 ) ); desk.add( subPnl , new Integer( 350 ) ); desk.add( mulPnl , new Integer( 350 ) ); desk.add( divPnl , new Integer( 350 ) ); setLayeredPane( desk );

MiniMain

每个方法都以public void actionPerformed( ActionEvent event ){ if( event.getSource() == addBtn ) { plus(); } if( event.getSource() == subBtn ) { minus(); } if( event.getSource() == mulBtn ) { times(); } if( event.getSource() == divBtn ) { divide(); } if( event.getSource() == menuBtn ) { home(); } if( event.getSource() == noteBtn ) { MiniPad.pad(); return; } removeAll()内容JPanel的一些声明开始,这些声明将链接到方法

public void plus(){
mainPnl.removeAll(); mainG.removeAll(); addPnl.removeAll();

1 个答案:

答案 0 :(得分:3)

您是否考虑过CardLayout,然后可以在JPanel之间创建每个不同的JPanel并简单地翻转,这样做会更好每次JPanel的所有组件并添加新组件:

//Where instance variables are declared:
JPanel cards;
final static String BUTTONPANEL = "Card with JButtons";
final static String TEXTPANEL = "Card with JTextField";

//Where the components controlled by the CardLayout are initialized:
//Create the "cards".
JPanel card1 = new JPanel();
...
JPanel card2 = new JPanel();
...

//Create the panel that contains the "cards".
cards = new JPanel(new CardLayout());
cards.add(card1, BUTTONPANEL);
cards.add(card2, TEXTPANEL);
...

getContentPane().add(cards, BorderLayout.CENTER);//add card panel to frame
setVisible(true);//show frame

CardLayout cl = (CardLayout)(cards.getLayout());//get cards
cl.show(cards, BUTTONPANEL);//switch cards to button JPanel