【问题标题】:Menubar not added in a java split pane菜单栏未添加到 Java 拆分窗格中
【发布时间】:2013-08-16 12:46:41
【问题描述】:

我编写了一个小型测试程序,它创建了一个拆分窗格,其中一个窗格是一个文本区域。我在窗格中添加了一个 meubar 和 menuitems,但我在创建的 gui 中看不到它们。

谁能指出我在下面的程序中做错了什么:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.JMenuBar;
import java.util.*;
import javax.swing.text.BadLocationException;
import java.awt.*;
import java.io.IOException;


//SplitPaneDemo itself is not a visible component.
public class SplitPaneDemo extends JFrame
                          implements ActionListener {

    private JTextArea ta;
    private JMenuBar menuB;
        private JMenu dbM;
        private JMenuItem cnadb,bsmdb,cdmdb;
     private JLabel picture;


    private JSplitPane splitPane;
    public SplitPaneDemo() {

        ta = new JTextArea(); //textarea
        ta.setLineWrap(true);
            ta.setWrapStyleWord(true);
            ta.addKeyListener(new KeyAdapter()
        {
                 public void keyPressed(KeyEvent ke )
                 {

                 int code = ke.getKeyCode();
                 int modifiers = ke.getModifiers();
                 if(code == KeyEvent.VK_ENTER && modifiers == KeyEvent.CTRL_MASK)
                 {
                  System.out.println("cmd in table:");
           }
                }
                });

        JScrollPane taPane = new JScrollPane(ta);
        picture = new JLabel();
        picture.setFont(picture.getFont().deriveFont(Font.ITALIC));
        picture.setHorizontalAlignment(JLabel.CENTER);

        JScrollPane pictureScrollPane = new JScrollPane(picture);

        splitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT,
                                   taPane, pictureScrollPane);
        splitPane.setOneTouchExpandable(true);
        splitPane.setDividerLocation(450);

        //Provide minimum sizes for the two components in the split pane.
        Dimension minimumSize = new Dimension(100, 100);
        taPane.setMinimumSize(minimumSize);
        pictureScrollPane.setMinimumSize(minimumSize);

        //Provide a preferred size for the split pane.
        splitPane.setPreferredSize(new Dimension(900, 900));

              menuB = new JMenuBar(); //menubar
        dbM = new JMenu("DB"); //file menu
            cnadb = new JMenuItem("CNA");
            bsmdb = new JMenuItem("BSM");
            cdmdb = new JMenuItem("CDM");
            setJMenuBar(menuB);
            menuB.add(dbM);
            dbM.add(cnadb);
            dbM.add(bsmdb);
            dbM.add(cdmdb);
            cnadb.addActionListener(this);
            bsmdb.addActionListener(this);
            cdmdb.addActionListener(this);
            setVisible(true);
    }
        public void actionPerformed(ActionEvent e) 
        {
    }
    public void valueChanged(ListSelectionEvent e) {
    }

    public JSplitPane getSplitPane() {
        return splitPane;
    }


    private static void createAndShowGUI() {

        //Create and set up the window.
        JFrame frame = new JFrame("SplitPaneDemo");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        SplitPaneDemo splitPaneDemo = new SplitPaneDemo();
        frame.getContentPane().add(splitPaneDemo.getSplitPane());

        //Display the window.
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        //Schedule a job for the event-dispatching thread:
        //creating and showing this application's GUI.
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                createAndShowGUI();
            }
        });
    }


}

【问题讨论】:

    标签: java swing jtextarea jmenubar splitpane


    【解决方案1】:

    您在SplitPaneDemo 类中添加了JMenuBar,但是当您实际调用createAndShowGUI 时,您创建了一个新的JFrame,并且只在调用getSplitPane 时将SplitPane 添加到其中。这个新框架不知道菜单栏。

    如果您在SplitPaneDemo 中扩展JFrame,为什么不使用它来为您的gui 制作框架?

    【讨论】:

    • 不幸的是,我是 java 新手。你能不能再详细点?
    • 好吧,您正在创建一个扩展 JFrame 并添加了拆分窗格和菜单栏的新类。但是,您没有使用您创建的那个类,而是在不知道任何内容的情况下创建了一个新的 JFrame。然后,您继续只将拆分窗格添加到新框架中。
    • 因此您需要使用 SplitPaneDemo 作为此 gui 的框架。但是,根据您的代码,我强烈建议您在继续之前阅读有关 swing ui 的本教程。 docs.oracle.com/javase/tutorial/uiswing
    猜你喜欢
    • 1970-01-01
    • 2019-06-16
    • 2016-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多