3

好吧,我一直在网上寻找一些帮助,但我尝试的任何方法似乎都不起作用。我想让所有的菜单文本都集中在他们的菜单按钮上。我用setHorizontalTextPosition(JMenu.CENTER)的时候没有变化。事实上,无论我使用什么常量,菜单文本都保持左对齐。

有任何想法吗?

*更新 1

仍然没有运气。重新阅读 JMenu API 后,我意识到,setHorizontalTextPosition(int)setVerticalTextPosition(int)设置与图标相关的文本,setHorizontalAlignment(int)setVerticalAlignment(int)在 JMenu 中设置文本和图标的对齐方式。

与图标一起使用时,文本定位方法似乎像宣传的那样工作。

垂直对齐方法似乎适用于文本或图标或两者。

但是,水平对齐方法似乎根本不起作用。即使只是在文本或图标或两者上单独使用它,似乎也没有任何改变。我已将菜单大小增加到 150x50,无论组合如何,我都无法获得文本或图标,也无法水平居中。

4

5 回答 5

3

继续 MadProgrammer 的 using 主题HTML,我曾经CSS在菜单中定位和设置文本样式。style="text-align:center;"用于CSS将文本定位在中心。就我而言,我将JMenu标题封装在元素<p>内的段落标签中<html>

clientFilter = new JMenu("<html><p style='text-align:center;'>Client</p></html>");
siteFilter = new JMenu("<html><p style='text-align:center;'>Site</p></html>");
employeeFilter = new JMenu("<html><p style='text-align:center;'>Employee</p></html>");
jobtypeFilter = new JMenu("<html><p style='text-align:center;'>Job Type</p></html>");

看起来像这样;

在此处输入图像描述

值得注意的是,在上图中我也使用width:90px;color:blue;了 style 属性,但为了简单起见,我从上面的代码示例中删除了这两种样式。希望这可以帮助。

于 2013-08-20T08:21:40.487 回答
2

尝试setHorizontalTextPosition(SwingConstants.CENTER);紧随其后invalidate();

或者使用边距

JMenu optionsMenu = new JMenu("Option");
optionsMenu.setMargin(new Insets(5, 50, 5, 5));

我做了一个简短的 SSCCE,看看我是否可以重新制定问题,但我的问题似乎从一开始就完全一致,不需要上述任何内容:

截图链接:http: //img713.imageshack.us/img713/1489/67449235.jpg

import java.awt.BorderLayout;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.SwingUtilities;

public class JMenuCenterTest extends JFrame {

    public JMenuCenterTest() {
        createUI();
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                new JMenuCenterTest().setVisible(true);
            }
        });
    }

    private void createUI() {
        setTitle("JMenu Center Test");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(300, 300);
        JMenuBar bar = new JMenuBar();
        JMenu menu1 = new JMenu("File");
        //menu1.setMargin(new Insets(5, 50, 5, 5));
        JMenu menu2 = new JMenu("Options");
        JMenu menu3 = new JMenu("Help");
        //menu1.setHorizontalTextPosition(SwingConstants.CENTER);
        // invalidate();
        bar.add(menu1);
        bar.add(menu2);
        bar.add(menu3);
        getContentPane().add(bar, BorderLayout.NORTH);
    }
}

参考:

于 2012-07-30T19:59:06.383 回答
2

好的,我已经玩过了这个,我得出的结论是,我认为通过设置JMenu.

您所做的任何事情都会被 UI 委托覆盖。

尝试这个:

JMenu menu = new JMenu("<html><table width='100%'><tr><td halign='center' align='center' bgcolor='red'>File</td></tr></table></html>");

menuBar.add(menu);

您会发现,无论您制作多宽的菜单,提供给文本的区域也足够大以呈现它。

菜单文本示例

我能看到你剩下的唯一选择是提供你自己的 UI 代表,恕我直言,这是一个非常非常糟糕的主意,最终只会在你的脸上爆炸,但这只是我的意见:P

于 2012-07-30T23:20:01.797 回答
1

我认为setHorizontalAlignment应该做你想做的,同时setHorizontalTextPosition指定相对于图标的文本位置。

于 2012-07-30T20:01:33.957 回答
1

所以解决方案是:

private JMenuBar menu;
private JMenu file;

Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
double height = (double)screenSize.getHeight();
double widht = (double)screenSize.getWidth();

double frameh = 0.3*height; int frameH =(int)Math.ceil(frameh);
double framew = 0.3*widht;  int frameW = (int)Math.ceil(framew);

double menuh = 0.1*frameh;      int menuH = (int)Math.ceil(menuh);
double menuw = framew;          int menuL = frameW;

double fileh = menuh;       int fileH = menuH;
double filew = 0.1*menuw;   int fileW = (int)Math.ceil(filew);

    int textPos= fileW-10; //at the start of the button you have a little margin and you must leave somme pixel to fixe the center.

Window(){

    initialisation();
    construction();

    this.setTitle("Tutoriel 1.3 HS");
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    this.setSize(frameW, frameH);
    this.setLocationRelativeTo(null);
    this.setVisible(true);
}

public void initialisation(){       
    file = new JMenu(("<html><table width='"+textPos+"'><tr><td align='center'>File</td></tr></table></html>"));// this is accept


    file.setPreferredSize(new Dimension(fileW, fileH));
    menu = new JMenuBar();
    menu.setPreferredSize(new Dimension(menuL, menuH));
    menu.add(file);     
}

public void construction(){
    this.setJMenuBar(menu);
}
于 2015-11-08T22:37:33.007 回答