Java 为什么不是';我的JMenu不工作吗?

Java 为什么不是';我的JMenu不工作吗?,java,Java,所有的东西都显示出来并且工作正常,但是每当我加载它时,菜单就不会显示出来。我做错了什么?为了让它工作,我试着用其他的东西做实验,但是它从来没有工作过。有什么建议吗 Java代码 import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.text.*; public class DVD extends JFrame implements ActionListener { //const

所有的东西都显示出来并且工作正常,但是每当我加载它时,菜单就不会显示出来。我做错了什么?为了让它工作,我试着用其他的东西做实验,但是它从来没有工作过。有什么建议吗

Java代码

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

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

//initialize data in arrays
String title[] = {"Casablanca", "Citizen Kane", "Singin in the Rain", "The Wizard of Oz"};
String studio[] = {"Warner Bros.", "RKO Pictures", "MGM", "MGM"};
String year[] = {"1942", "1941", "1952", "1939"};

public DVD()
{
    super("Classics on DVD");
}

// Create the menu system
public JMenuBar createMenuBar()
{
    // create an instance of the menu
    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(1);
    mnuFile.add(mnuFile);

    // construct and populate the Exit menu
    JMenuItem mnuFileExit = new JMenuItem("Exit");
    mnuFileExit.setMnemonic(KeyEvent.VK_X);
    mnuFileExit.setDisplayedMnemonicIndex(1);
    mnuFile.add(mnuFileExit);
    mnuFileExit.setActionCommand("Exit");
    mnuFileExit.addActionListener(this);

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

    // Insert
    JMenuItem mnuEditInsert = new JMenuItem("Insert new DVD");
    mnuEditInsert.setMnemonic(KeyEvent.VK_I);
    mnuEditInsert.setDisplayedMnemonicIndex(0);
    mnuEdit.add(mnuEditInsert);
    mnuEditInsert.setActionCommand("Insert");
    mnuEditInsert.addActionListener(this);

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

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

    JMenuItem mnuEditSearchByStudio = new JMenuItem("by Studio");
    mnuEditSearchByStudio.setMnemonic(KeyEvent.VK_S);
    mnuEditSearchByStudio.setDisplayedMnemonicIndex(3);
    mnuEditSearch.add(mnuEditSearchByStudio);
    mnuEditSearchByStudio.setActionCommand("studio");
    mnuEditSearchByStudio.addActionListener(this);

    JMenuItem mnuEditSearchByYear = new JMenuItem("by Year");
    mnuEditSearchByYear.setMnemonic(KeyEvent.VK_Y);
    mnuEditSearchByYear.setDisplayedMnemonicIndex(3);
    mnuEditSearch.add(mnuEditSearchByYear);
    mnuEditSearchByYear.setActionCommand("year");
    mnuEditSearchByYear.addActionListener(this);

    return mnuBar;
}

// create the content pane
public Container createContentPane()
{
    fieldCombo.addItem("Title");
    fieldCombo.addItem("Studio");
    fieldCombo.addItem("Year");
    fieldCombo.addActionListener(this);
    fieldCombo.setToolTipText("Click the drop down arrow to display sort fields.");

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

    // create the JTextPane and center panel
    JPanel centerPanel = new JPanel();
    setTabsAndStyles(textPane);
    textPane = addTextToTextPane();
    JScrollPane scrollPane = new JScrollPane(textPane);
    textPane.setEditable(false);

    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;
}


// method to create tab stops and set font styles
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("bold", regular);
    StyleConstants.setBold(s, true);

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

// method to add new text to the JTextPane
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"));
        }
    }

    catch(BadLocationException ble)
    {
        System.err.println("Couldn't insert text");
    }

    return textPane;
}

// event to process user clicks
public void actionPerformed(ActionEvent e)
{
    String arg = e.getActionCommand(); // execute the getActionCommand() (java method) store in arg
    //user clicks the sort by Combo box // combo field is one of the selections in an array format
    if(e.getSource() == fieldCombo)
    {
        switch(fieldCombo.getSelectedIndex())
        {
        case 0:
            sort(title);
            break;
        case 1:
            sort(studio);
            break;
        case 2:
            sort(year);
            break;
        }
    }

    // user clicks Exit on the File menu

    if(arg == "Exit")
        System.exit(0);

    // user clicks Insert new DVD on the Edit menu
    if(arg == "Insert")
    {
        // accept new data
        String newTitle = JOptionPane.showInputDialog(null, "Please enter the new movie'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 new data to arrays
        title[title.length-1] = newTitle;
        studio[studio.length-1] = newStudio;
        year[year.length-1] = newYear;

        // call sort method necessary for search
        sort(title);
        fieldCombo.setSelectedIndex(0);
    }

    // user clicks Title on the Search submenu
    if(arg == "title")
        search(arg, title);

    // user clicks Studio on the Search submenu
    if(arg == "studio")
        search(arg, studio);

    // user clicks Year on the Search submenu
            if(arg == "year")
                search(arg, year);
}

// method to enlarge and array 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;
}

// 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(year, element, element + 1);
            }
    }
    addTextToTextPane();
}

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

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

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

        // prompt user 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"));
                found = true;

            }
        }
        if(found == false)
        {
            JOptionPane.showMessageDialog(null, "Your Search produced no results", "No results found", JOptionPane.INFORMATION_MESSAGE);
            sort(title);
        }
    }

    catch(BadLocationException ble)
    {
        System.err.println("Couldn't insert text");
    }
}

// main method executes at run time
public static void main(String args[])
{
    JFrame.setDefaultLookAndFeelDecorated(true);
    DVD f = new DVD();
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f.setJMenuBar(f.createMenuBar());
    f.setContentPane(f.createContentPane());
    f.setSize(600,375);
    f.setVisible(true);

}

}
import java.awt.*;
导入java.awt.event.*;
导入javax.swing.*;
导入javax.swing.text.*;
公共类DVD扩展JFrame实现ActionListener
{
//构造组件
JLabel sortPrompt=新的JLabel(“排序依据:”);
JComboBox fieldCombo=新的JComboBox();
JTextPane textPane=新的JTextPane();
//初始化数组中的数据
字符串标题[]={“卡萨布兰卡”、“公民凯恩”、“雨中歌唱”、“绿野仙踪”};
弦乐工作室[]={“华纳兄弟”、“RKO电影”、“米高梅”、“米高梅”};
字符串年份[]={“1942”、“1941”、“1952”、“1939”};
公共DVD()
{
超级(“DVD上的经典作品”);
}
//创建菜单系统
公共JMenuBar createMenuBar()
{
//创建菜单的一个实例
JMenuBar mnuBar=新的JMenuBar();
setJMenuBar(mnuBar);
//构造并填充“文件”菜单
JMenu mnuFile=新JMenu(“文件”,true);
mnuFile.setMnemonic(KeyEvent.VK_F);
mnuFile.setDisplayedMononicIndex(1);
mnuFile.add(mnuFile);
//构造并填充退出菜单
JMenuItem mnuFileExit=新的JMenuItem(“退出”);
mnuFileExit.setMnemonic(KeyEvent.VK_X);
mnuFileExit.setDisplayedMonicIndex(1);
mnuFile.add(mnuFileExit);
mnuFileExit.setActionCommand(“退出”);
mnuFileExit.addActionListener(此);
//构造并填充“编辑”菜单
JMenu mnuEdit=新JMenu(“编辑”,真);
mnuEdit.setMnemonic(KeyEvent.VK_E);
mnuEdit.setDisplayedMonicIndex(0);
mnuEdit.add(mnuEdit);
//插入
JMenuItem mnuEditInsert=新JMenuItem(“插入新DVD”);
mnuEditInsert.setMnemonic(KeyEvent.VK_I);
mnuEditInsert.setDisplayedMonicIndex(0);
mnuEdit.add(mnuEditInsert);
mnuEditInsert.setActionCommand(“插入”);
mnuEditInsert.addActionListener(此);
//搜寻
JMenu mnuEditSearch=新JMenu(“搜索”,true);
mnuEditSearch.setMnemonic(KeyEvent.VK_R);
mnuEditSearch.setDisplayedMonicIndex(3);
mnuEdit.add(mnuEditSearch);
JMenuItem mnuEditSearchByTitle=新的JMenuItem(“按标题”);
mnuEditSearchByTitle.set助记符(KeyEvent.VK_T);
mnuEditSearchByTitle.setDisplayedMonicIndex(3);
mnuEditSearch.add(mnuEditSearchByTitle);
mnuEditSearchByTitle.setActionCommand(“标题”);
mnuEditSearchByTitle.addActionListener(此);
JMenuItem mnuEditSearchByStudio=新JMenuItem(“由工作室”);
mnuEditSearchByStudio.set助记符(KeyEvent.VK_S);
mnuEditSearchByStudio.setdisplayednemonicindex(3);
mnuEditSearch.add(mnuEditSearchByStudio);
mnuEditSearchByStudio.setActionCommand(“studio”);
mnuEditSearchByStudio.addActionListener(此);
JMenuItem mnuEditSearchByYear=新的JMenuItem(“按年”);
mnuEditSearchByYear.setMemonic(KeyEvent.VK_Y);
mnuEditSearchByYear.SetDisplayedMonicIndex(3);
mnuEditSearch.add(mnuEditSearchByYear);
mnuEditSearchByYear.setActionCommand(“年”);
mnuEditSearchByYear.addActionListener(此);
返回mnuBar;
}
//创建内容窗格
公共容器createContentPane()
{
fieldCombo.addItem(“标题”);
fieldCombo.addItem(“工作室”);
fieldCombo.addItem(“年度”);
fieldCombo.addActionListener(此);
setToolTipText(“单击下拉箭头以显示排序字段”);
//构造并填充北面板
JPanel northPanel=新的JPanel();
setLayout(新的FlowLayout());
添加(sortPrompt);
添加(字段组合);
//创建JTextPane和中心面板
JPanel centerPanel=新的JPanel();
设置选项卡和样式(文本窗格);
textPane=addTextToTextPane();
JScrollPane scrollPane=新的JScrollPane(textPane);
textPane.setEditable(false);
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,制表符.ALIGN\u LEFT,制表符.LEAD\u NONE);
制表符[1]=新制表符(350,TabStop.ALIGN\u LEFT,TabStop.LEAD\u NONE);
TabSet TabSet=新的TabSet(tabs);
//设置选项卡样式
StyleContext tabStyle=StyleContext.getDefaultStyleContext();
AttributeSet aset=tabStyle.addAttribute(SimpleAttributeSet.EMPTY,StyleConstants.TabSet,TabSet);
setParagraphAttributes(aset,false);
//设置字体样式
Style fontStyle=StyleContext.getDefaultStyleContext().getStyle(StyleContext.DEFAULT_Style);
Style regular=textPane.addStyle(“常规”,fontStyle);
setFontFamily(fontStyle,“SansSerif”);
Style s=textPane.addStyle(“斜体”,常规);
StyleConstants.setItalic(s,true);
s=textPane.addStyle(“粗体”,常规);
StyleConstants.setBold(s,true);
s=textPane.addStyle(“大”,常规);
setFontSize(s,16);
}
//方法将新文本添加到JTextPane
公共JTextPane addTextToTextPane()
{
Document doc=textPane.getDocument();
尝试
{
//清除以前的文本
doc.remove(0,doc.getLength());
//插入标题
doc.insertString(0,“TITLE\tSTUDIO\tYEAR\n”,textPane.getStyle(“大”);
//插入详细信息
对于(int j=0;jmnuBar.add(mnuFile);
mnuFile.add(mnuFile);