2012-09-02 54 views
0
import org.jdesktop.application.SingleFrameApplication; 
import java.awt.Container; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.JMenu; 
import javax.swing.JMenuBar; 
import javax.swing.JMenuItem; 
import javax.swing.JPanel; 
import org.jdesktop.application.FrameView; 

public class Welcome extends FrameView 
{ 
    SearchPanelClass panel1 = new SearchPanelClass(); 
    AddMaterialPanel panel2 = new AddMaterialPanel(); 
    Container container= AutomobileApplication.getApplication().getMainFrame(); 
    public Welcome(SingleFrameApplication app) 
    { 
     super(app); 
     initMenu(); 
} 

private class MenuAction implements ActionListener { 

private SearchPanelClass panel; 
private MenuAction(SearchPanelClass pnl) 
{ 

    this.panel = pnl; 

} 
private AddMaterialPanel AddMaterialPan; 
private MenuAction(AddMaterialPanel pnl) 
{ 
    this.AddMaterialPan = pnl; 
} 

public void actionPerformed(ActionEvent e) { 
    String command = e.getActionCommand(); 
    if(command == "Panel1") 
    { 
     changePanel(panel1); 
    } 
    if(command =="Panel2") 
    { 
     changePanel(panel2); 
    } 

    } 

} 

private void initMenu() { 

JMenuBar menubar = new JMenuBar(); 
JMenu menu = new JMenu("Menu"); 
JMenuItem menuItem1 = new JMenuItem("Panel1"); 
JMenuItem menuItem2 = new JMenuItem("Panel2"); 
menubar.add(menu); 
menu.add(menuItem1); 
menu.add(menuItem2); 
this.setMenuBar(menubar); 
menuItem1.addActionListener(new MenuAction(panel1)); 
menuItem2.addActionListener(new MenuAction(panel2)); 

} 

private void changePanel(JPanel panel) { 
container.removeAll(); 
setComponent(panel); 
panel.setVisible(true); 
container.doLayout(); 
    } 
} 

此處SearchPanelClass和AddMaterialPanel是我想根據menuitem單擊添加的兩個自定義面板。但面板僅在調整窗口大小時纔可見。任何人都可以告訴我哪些程序在窗口調整大小後端調用?動態添加的面板只有在調整大小時才變爲可見

請掌舵我...

在此先感謝..

+0

請問您可以添加main(String [] args)嗎? –

+0

請學習java命名約定並堅持使用它們。 – kleopatra

+0

@ kleopatra它只是練習,但隨後也thnks諮詢 – rupareliab

回答

7

不要忘記調用revalidate()repaint()即具有JPanels添加或從中取出容器上。

  • revalidate()將告訴容器讓其佈局管理器重新佈局它所擁有的所有組件。
  • repaint()將告訴組件重繪本身及其所有子組件。這並不總是需要,但往往是需要的,特別是如果組件被刪除。

另外,不要使用==比較字符串,你在這裏做的:

public void actionPerformed(ActionEvent e) { 
    String command = e.getActionCommand(); 
    if(command == "Panel1") 
    { 
     changePanel(panel1); 
    } 
    if(command =="Panel2") 
    { 
     changePanel(panel2); 
    } 

    } 

} 

==運營商將檢查兩個String對象是同一個,有些東西你不關心。而是使用字符串方法equals(...)equalsIgnoreCase(...),這將測試兩個字符串是否包含相同順序的相同字符。因此,例如做:

String command = e.getActionCommand(); 
if("Panel1".equalsIgnoreCase(command)) { 
    changePanel(panel1); 
} else if("Panel2".equalsIgnoreCase(command)) { 
    changePanel(panel2); 
} 

編輯:更妙的是,使用CardLayout交換JComponents:The CardLayout Tutorialthe CardLayout API

編輯2:請注意,您的org.jdesktop.application.SingleFrameApplication使用意味着你正在使用JSR 296:Swing應用程序框架庫以及對該庫的狀態進行審查,結果顯示它已被撤銷,如here所述。所以目前看來這個庫目前還沒有被支持或更新。

+0

非常感謝你的建議....真的很感謝你! – rupareliab

+1

不客氣。再次,認真考慮使用CardLayout,因爲它可以讓你的生活更輕鬆。 –

+1

@ user1536963:您可以通過點擊[空對號](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work/5235#5235)來接受此答案。左邊。 – trashgod

相關問題