日期:2014-05-20  浏览次数:20773 次

有关GUI编程
Java 中可以使菜单栏在窗口左侧竖直显示吗?如果可以,该怎么做。急求!谢谢!

------解决方案--------------------
这样做好像不太美观吧,还不如将窗口分成几个块,将左边做成导航栏一样的
------解决方案--------------------
一、你要设置JMenuBar的布局,使其内部为竖直排列
二、你在把JMenuBar加到面板上时,也要将其加到整体界面的左侧
------解决方案--------------------
以下是我在本地写的测试源码,你按照修改一下就可以了,注意主要就是要设置jmenu的布局管理器,
Java code
package com;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;

import javax.swing.BorderFactory;
import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JPopupMenu;
import javax.swing.SwingUtilities;

public class TestAnswer extends JFrame{
    TestAnswer(){
        this.getContentPane().add(this.createMenuBar(),
                BorderLayout.LINE_START);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
    
    public JMenuBar createMenuBar() {
        JMenuBar menuBar = new JMenuBar();
        menuBar.setLayout(new BoxLayout(menuBar, BoxLayout.PAGE_AXIS));//设置JMenuBar的布局管理器为纵向的
        menuBar.add(createMenu("Menu 1"));
        menuBar.add(createMenu("Menu 2"));
        menuBar.add(createMenu("Menu 3"));

        menuBar.setBorder(BorderFactory.createMatteBorder(0,0,0,1,
                                                          Color.BLACK));//设置border
        return menuBar;
    }
    
    class HorizontalMenu extends JMenu {
        HorizontalMenu(String label) {
            super(label);
            JPopupMenu pm = getPopupMenu();
            pm.setLayout(new BoxLayout(pm, BoxLayout.LINE_AXIS));//设置纵向菜单的布局
        }
        @Override
        public Dimension getMinimumSize() {
            return getPreferredSize();
        }
        @Override
        public Dimension getMaximumSize() {
            return getPreferredSize();
        }

    }
    
    
    public JMenu createMenu(String title) {
        JMenu m = new HorizontalMenu(title);
        return m;
    }
    
    public static void main(String[] args){
        //异步调用,使用awt的调度线程
        SwingUtilities.invokeLater(new Runnable() {
            
            @Override
            public void run() {
                TestAnswer t = new TestAnswer();
                t.pack();
                t.setVisible(true);
            }
        });
    }
}