Java swing应用程序中JMenuBar弹出按钮的问题

Java swing应用程序中JMenuBar弹出按钮的问题,java,swing,jmenubar,Java,Swing,Jmenubar,我的JMenuBar有问题。我用下面的代码添加了一个图像。我想退出文件菜单下的图像1(像一个下拉列表)和插入下的编辑选项卡-图像2。出于某种原因,该开关也应位于“编辑”选项卡下,但未显示-图像3。当你在“编辑”菜单中的“搜索”上悬停时,我希望图像4、5和6出现。我认为所有这些都是相关的。有人能看出我的错误吗?希望图片能让我的问题更清楚,提前谢谢 import java.awt.*; import java.awt.event.*; import javax.swing.*; import

我的JMenuBar有问题。我用下面的代码添加了一个图像。我想退出文件菜单下的图像1(像一个下拉列表)和插入下的编辑选项卡-图像2。出于某种原因,该开关也应位于“编辑”选项卡下,但未显示-图像3。当你在“编辑”菜单中的“搜索”上悬停时,我希望图像4、5和6出现。我认为所有这些都是相关的。有人能看出我的错误吗?希望图片能让我的问题更清楚,提前谢谢

 import java.awt.*;
 import java.awt.event.*;
 import javax.swing.*;
 import javax.swing.text.*;

 public class DVD1 extends JFrame implements ActionListener
 {
//construct components
JLabel sortPromt= new JLabel("Sort by:");
JComboBox fieldCombo= new JComboBox();
JTextPane textPane = new JTextPane();

//initalize data in arrays
String title[]={"Casablanca", "Citizen Kane", "Singin in the rain", "The wizzard of Oz"};
String studio[]={"Wanner Brothers", "RKO Pictures", "MGM", "MGM"};
String year[]={"1942", "1941", "1952", "1939"};

 //construct an instance of DVD
 public DVD1()
 {
    super("Classic on DVD");
 }
 //create the menu system
 public JMenuBar createMenuBar()
 {
    ///create instance of menu bar
    JMenuBar mnuBar =new JMenuBar();
    setJMenuBar(mnuBar);

    //Construct and Populate the File menu
    JMenu mnuFile = new JMenu("File",true);
        mnuFile.setMnemonic(KeyEvent.VK_F);
        mnuFile.setDisplayedMnemonicIndex(0);
        mnuBar.add(mnuFile);

    JMenuItem mnuFileExit =new JMenuItem("Exit");
        mnuFileExit.setMnemonic(KeyEvent.VK_E);
        mnuFileExit.setDisplayedMnemonicIndex(1);
        mnuBar.add(mnuFileExit);
        mnuFileExit.setActionCommand("Exit");
        mnuFileExit.addActionListener(this);

    //construct and pop the edit menu
    JMenu mnuEdit = new JMenu("Edit",true);
        mnuEdit.setMnemonic(KeyEvent.VK_E);
        mnuEdit.setDisplayedMnemonicIndex(0);
        mnuBar.add(mnuEdit);

    JMenuItem mnuEditInsert = new JMenuItem("Insert New DVD");
        mnuEditInsert.setMnemonic(KeyEvent.VK_I);
        mnuEditInsert.setDisplayedMnemonicIndex(1);
        mnuBar.add(mnuEditInsert);
        mnuEditInsert.setActionCommand("Insert");
        mnuEditInsert.addActionListener(this);

    JMenu mnuEditSearch = new JMenu("Search",true);
        mnuEditSearch.setMnemonic(KeyEvent.VK_R);
        mnuEditSearch.setDisplayedMnemonicIndex(3);
        mnuEditSearch.add(mnuEditSearch);

    JMenuItem mnuEditSearchByTitle =new JMenuItem("By Title");
        mnuEditSearchByTitle.setMnemonic(KeyEvent.VK_T);
        mnuEditSearchByTitle.setDisplayedMnemonicIndex(3);
        mnuBar.add(mnuEditSearchByTitle);
        mnuEditSearchByTitle.setActionCommand("title");
        mnuEditSearchByTitle.addActionListener(this);

    JMenuItem mnuEditSearchByStudio =new JMenuItem("By Studio");
        mnuEditSearchByStudio.setMnemonic(KeyEvent.VK_S);
        mnuEditSearchByStudio.setDisplayedMnemonicIndex(3);
        mnuBar.add(mnuEditSearchByStudio);
        mnuEditSearchByStudio.setActionCommand("title");
        mnuEditSearchByStudio.addActionListener(this);

    JMenuItem mnuEditSearchByYear =new JMenuItem("By Year");
        mnuEditSearchByYear.setMnemonic(KeyEvent.VK_Y);
        mnuEditSearchByYear.setDisplayedMnemonicIndex(3);
        mnuBar.add(mnuEditSearchByYear);
        mnuEditSearchByYear.setActionCommand("title");
        mnuEditSearchByYear.addActionListener(this);

    return mnuBar;
}//End menu contructor

//Create the conetnt pane
public Container createContentPane()
{
    //populate the jcomboBox
    fieldCombo.addItem("Title");
    fieldCombo.addItem("Studio");
    fieldCombo.addItem("Year");
    fieldCombo.addActionListener(this);
    fieldCombo.setToolTipText("Click the drop-down arow to display sort fields");

    //construct and populate the north panel
    JPanel northPanel = new JPanel();
        northPanel.setLayout(new FlowLayout());
        northPanel.add(sortPromt);
        northPanel.add(fieldCombo);

    //Create the JTextPane  and center Panel
    JPanel centerPanel = new JPanel();
        setTabsAndStyles(textPane);
        textPane = addTextToTextPane();
        JScrollPane scrollPane = new JScrollPane(textPane);
            scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
            scrollPane.setPreferredSize(new Dimension(500, 200));
        centerPanel.add(scrollPane);

    //create container and set attributes
    Container c =  getContentPane();
        c.setLayout(new BorderLayout(10,10));
        c.add(northPanel,BorderLayout.NORTH);
        c.add(centerPanel,BorderLayout.CENTER);

    return c;

}//end create container method

//method to create thtab stops and set fontstyles
protected void setTabsAndStyles(JTextPane textPane)
{
    //create Tab Stops
    TabStop[] tabs = new TabStop[2];
        tabs[0] = new TabStop(200, TabStop.ALIGN_LEFT,TabStop.LEAD_NONE);
        tabs[1] = new TabStop(350, TabStop.ALIGN_LEFT,TabStop.LEAD_NONE);
    TabSet tabset = new TabSet(tabs);

    //set tab style
    StyleContext tabStyle = StyleContext.getDefaultStyleContext();
    AttributeSet aset=
        tabStyle.addAttribute(SimpleAttributeSet.EMPTY, StyleConstants.TabSet,tabset);
    textPane.setParagraphAttributes(aset, false);

    //set Font Style
    Style fontStyle =
        StyleContext.getDefaultStyleContext().getStyle(StyleContext.DEFAULT_STYLE);

    Style regular = textPane.addStyle("regular", fontStyle);
    StyleConstants.setFontFamily(fontStyle, "sansSerif");

    Style s = textPane .addStyle("italic",regular);
    StyleConstants.setItalic(s,true);

    s = textPane .addStyle("blod",regular);
    StyleConstants.setBold(s,true);

    s = textPane .addStyle("lard",regular);
    StyleConstants.setFontSize(s,16);

}

//method to ad text to textpane
public JTextPane addTextToTextPane()
{
    Document doc = textPane.getDocument();
    try
    {
        //clear previous text
        doc.remove(0, doc.getLength());

        //Insert title
        doc.insertString(0,"Title\tStudio\tYear\n",textPane.getStyle("large"));

        //insert detail
        for(int j=0;j<title.length;j++)
        {
            doc.insertString(doc.getLength(),title[j] + "\t",textPane.getStyle("bold"));
            doc.insertString(doc.getLength(),studio[j] + "\t",textPane.getStyle("italic"));
            doc.insertString(doc.getLength(),year[j] + "\n",textPane.getStyle("regular"));
        }//end loop
    } //end try
    catch (BadLocationException ble)
    {
        System.err.println("Couldnlt Insert Text");
    }//end catch
    return textPane;
}///end addtexttotextpane method

public void actionPerformed(ActionEvent e)
{
  String arg = e.getActionCommand();

  //user clicks the sort by combo box
  if(e.getSource() == fieldCombo)
    {
        switch(fieldCombo.getSelectedIndex())
        {
            case 0:
                sort(title);
                break;
            case 1:
                sort(studio);
                break;
            case 2:
                sort(year);
                break;
        }//end swictch
    } //end if

   //user clicks exit on file menu
    if (arg=="Exit")
        System.exit(0);
   //user clicks insert new dvd on edit menu
    if (arg=="insert")
    {
       String newTitle = JOptionPane.showInputDialog(null, "Please enter the moive's title");
       String newStudio = JOptionPane.showInputDialog(null, "Please enter the studio for" + newTitle);
       String newYear = JOptionPane.showInputDialog(null, "Please enter the year for " + newTitle);

        //Enlarge arrays
        title = enlargeArray(title);
        studio = enlargeArray(studio);
        year = enlargeArray(year);

        //add to arrys
        title[title.length-1] = newTitle;
        studio[studio.length-1] = newStudio;
        year[year.length-1] = newYear;

        //call to sort method
        sort(title);
        fieldCombo.setSelectedIndex(0);

    }//end if

    //user clicks title on search submeu
    if(arg=="title")
        search(arg,title);

    //user clicks title on studio submeu
    if(arg=="studio")
        search(arg,studio);

    //user clicks title on year submeu
    if(arg=="year")
        search(arg,year);

}//end of actionPerfomed method

//Method  to enlarge an arry by 1
public String[] enlargeArray(String[]currentArray)
{
    String[]newArray=new String [currentArray.length +1];
    for(int i = 0; i<currentArray.length;i++)
        newArray[i]=currentArray[i];
    return newArray;
}//end enlarg arry method

//method to sort arrays
public void sort(String tempArray[])
{
    //loop to control number of passes
    for(int pass = 1;pass<tempArray.length;pass++)
    {
        for(int element =0 ; element<tempArray.length -1 ;element++)
            if (tempArray[element].compareTo(tempArray[element+1])>0)
            {
                swap(title,element,element+1);
                swap(studio,element, element+1);
                swap(studio,element, element+1);

            }//end if
    }//end of loop
    addTextToTextPane();
}//end of sort method

//method to swap two elements of an array
public void swap(String swapArray[], int first, int second)
{
    String hold;//temp area to hold for swap
    hold = swapArray[first];
    swapArray[first] = swapArray[second];
    swapArray[second] = hold;

} //end swap method

public void search (String searchField, String searchArray[])
{
    try
    {
        Document doc = textPane.getDocument();//assing text to document object
        doc.remove(0,doc.getLength());//clear previous text

        //display colomTitles
        doc.insertString(0,"TITLE\tSTUDIO\tYEAR\n",textPane.getStyle("large"));

        //Prompt users for search data
        String search=JOptionPane.showInputDialog(null, "Please enter the " + searchField);
        boolean found= false;

        //search arrays
        for (int i=0; i<title.length; i++)
        {
            if(search.compareTo(searchArray[i])==0)
            {
             doc.insertString(doc.getLength(),title[i] + "\t", textPane.getStyle("bold"));
             doc.insertString(doc.getLength(),studio[i] + "\t", textPane.getStyle("italic"));
             doc.insertString(doc.getLength(),year[i] + "\n", textPane.getStyle("regular"));
            }//end if
        }//end for
        if (found = false)
        {
         JOptionPane.showMessageDialog(null,"Your search produced no results.", "no results found", JOptionPane.INFORMATION_MESSAGE);
         sort(title);
        }//end if
    }//end try
    catch(BadLocationException ble)
    {
        System.err.println("Couldn't insert text.");
    }//end catch
}//End serach method
//main method executes at runtime
public static void main(String args[])
{
    JFrame.setDefaultLookAndFeelDecorated(true);
    DVD1 f =new DVD1();
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f.setJMenuBar(f.createMenuBar());
    f.setContentPane(f.createContentPane());
    f.setSize(600,375);
    f.setVisible(true);
}//end main method



 }//end dvd class

import java.awt.*;
导入java.awt.event.*;
导入javax.swing.*;
导入javax.swing.text.*;
公共类DVD1扩展JFrame实现ActionListener
{
//构造组件
JLabel sortPromt=新的JLabel(“排序依据:”);
JComboBox fieldCombo=新的JComboBox();
JTextPane textPane=新的JTextPane();
//初始化数组中的数据
字符串标题[]={“卡萨布兰卡”、“公民凯恩”、“雨中歌唱”、“绿野仙踪”};
弦乐工作室[]={“万纳兄弟”、“RKO电影”、“米高梅”、“米高梅”};
字符串年份[]={“1942”、“1941”、“1952”、“1939”};
//构造DVD的一个实例
公共DVD1()
{
超级(“经典DVD”);
}
//创建菜单系统
公共JMenuBar createMenuBar()
{
///创建菜单栏的实例
JMenuBar mnuBar=新的JMenuBar();
setJMenuBar(mnuBar);
//构造并填充“文件”菜单
JMenu mnuFile=新JMenu(“文件”,true);
mnuFile.setMnemonic(KeyEvent.VK_F);
mnuFile.setDisplayedMononicIndex(0);
mnuBar.add(mnuFile);
JMenuItem mnuFileExit=新的JMenuItem(“退出”);
mnuFileExit.setMnemonic(KeyEvent.VK_E);
mnuFileExit.setDisplayedMonicIndex(1);
mnuBar.add(mnuFileExit);
mnuFileExit.setActionCommand(“退出”);
mnuFileExit.addActionListener(此);
//构造并弹出编辑菜单
JMenu mnuEdit=新JMenu(“编辑”,真);
mnuEdit.setMnemonic(KeyEvent.VK_E);
mnuEdit.setDisplayedMonicIndex(0);
mnuBar.add(mnuEdit);
JMenuItem mnuEditInsert=新JMenuItem(“插入新DVD”);
mnuEditInsert.setMnemonic(KeyEvent.VK_I);
mnuEditInsert.setDisplayedMonicIndex(1);
mnuBar.add(mnuEditInsert);
mnuEditInsert.setActionCommand(“插入”);
mnuEditInsert.addActionListener(此);
JMenu mnuEditSearch=新JMenu(“搜索”,true);
mnuEditSearch.setMnemonic(KeyEvent.VK_R);
mnuEditSearch.setDisplayedMonicIndex(3);
mnuEditSearch.add(mnuEditSearch);
JMenuItem mnuEditSearchByTitle=新的JMenuItem(“按标题”);
mnuEditSearchByTitle.set助记符(KeyEvent.VK_T);
mnuEditSearchByTitle.setDisplayedMonicIndex(3);
mnuBar.add(mnuEditSearchByTitle);
mnuEditSearchByTitle.setActionCommand(“标题”);
mnuEditSearchByTitle.addActionListener(此);
JMenuItem mnuEditSearchByStudio=新JMenuItem(“由工作室”);
mnuEditSearchByStudio.set助记符(KeyEvent.VK_S);
mnuEditSearchByStudio.setdisplayednemonicindex(3);
mnuBar.add(mnuEditSearchByStudio);
mnuEditSearchByStudio.setActionCommand(“标题”);
mnuEditSearchByStudio.addActionListener(此);
JMenuItem mnuEditSearchByYear=新的JMenuItem(“按年”);
mnuEditSearchByYear.setMemonic(KeyEvent.VK_Y);
mnuEditSearchByYear.SetDisplayedMonicIndex(3);
mnuBar.add(mnuEditSearchByYear);
mnuEditSearchByYear.setActionCommand(“标题”);
mnuEditSearchByYear.addActionListener(此);
返回mnuBar;
}//结束菜单控制器
//创建conetnt窗格
公共容器createContentPane()
{
//填充jcomboBox
fieldCombo.addItem(“标题”);
fieldCombo.addItem(“工作室”);
fieldCombo.addItem(“年度”);
fieldCombo.addActionListener(此);
fieldCombo.setToolTipText(“单击下拉框以显示排序字段”);
//构造并填充北面板
JPanel northPanel=新的JPanel();
setLayout(新的FlowLayout());
添加(sortPromt);
添加(字段组合);
//创建JTextPane和中心面板
JPanel centerPanel=新的JPanel();
设置选项卡和样式(文本窗格);
textPane=addTextToTextPane();
JScrollPane scrollPane=新的JScrollPane(textPane);
scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL\u SCROLLBAR\u ALWAYS);
scrollPane.setPreferredSize(新维度(500200));
添加(滚动窗格);
//创建容器并设置属性
容器c=getContentPane();
c、 setLayout(新边界布局(10,10));
c、 添加(northPanel,BorderLayout.NORTH);
c、 添加(中心面板,BorderLayout.CENTER);
返回c;
}//结束创建容器方法
//方法创建选项卡停止和设置字体样式
受保护的无效设置选项卡和样式(JTextPane textPane)
{
//创建制表位
TabStop[]tabs=新TabStop[2];
制表符[0]=新制表符(200,制表符.左对齐,制表符.前导\无);
制表符[1]=新制表符(350,制表符。左对齐,制表符。引线\u无);
TabSet TabSet=新的TabSet(tabs);
//设置选项卡样式
StyleContext tabStyle=StyleContext.getDefaultStyleContext();
属性集=
tabStyle.addAttribute(SimpleAttributeSet.EMPTY,StyleConstants.TabSet,TabSet);
setParagraphAttributes(aset,false);
//设置字体样式
风格=
StyleContext.getDefaultStyleContext().getStyle(StyleContext.DEFAULT\u样式);
Style regular=textPane.addStyle(“常规”,fontStyle);
setFontFamily(fontStyle,“sansSerif”);
Style s=textPane.addStyle(“斜体”,常规);
StyleConstants.setItalic(s,true);
s=textPane.addStyle(“blod”,常规);
StyleConstants.setBold(s,true);
s=textPane.addStyle(“猪油”,常规);
setFontSize(s,16);
}
//方法将文本广告到文本窗格
公共JTextPane addTextToTextPane()
{
Document doc=textPane.getDocument();
尝试
{
JMenu.add(JMenuItem menuItem)
JMenuBar.add(JMenu menu)
mnuFile.add(mnuFileExit);  // instead of mnuBar.add(mnuFileExit);