好吧,我一直在网上寻找一些帮助,但我尝试的任何东西似乎都没有用。我希望所有菜单文本都以菜单按钮为中心。当我使用setHorizontalTextPosition(JMenu.CENTER)
时,没有任何变化。事实上,无论我使用哪种常量,菜单文本都保持左对齐。
有什么想法吗?
* 更新1
仍然没有运气。在重新阅读JMenu API之后,我意识到setHorizontalTextPosition(int)
和setVerticalTextPosition(int)
仅设置了与图标相关的文本,而setHorizontalAlignment(int)
和setVerticalAlignment(int)
设置了文本和JMenu中的图标。
文本定位方法在与图标一起使用时似乎与宣传的一样。
垂直对齐方法似乎适用于文本或图标或两者。
然而,水平对齐方法似乎根本不起作用。即使只在文本或图标或两者上单独使用它,似乎没有任何改变。我已将菜单大小增加到150x50,无论组合如何,我都无法获取文本或图标或者水平居中。
答案 0 :(得分:3)
继续MadProgrammer使用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>");
看起来像这样;
值得注意的是,在上图中我还在style属性中使用了width:90px;color:blue;
,但为了简单起见,我从上面的代码示例中删除了这两个样式。希望这会有所帮助。
答案 1 :(得分:2)
尝试setHorizontalTextPosition(SwingConstants.CENTER);
,然后invalidate();
或者使用margins:
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);
}
}
参考:
答案 2 :(得分: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
答案 3 :(得分:1)
我认为setHorizontalAlignment
应该做你想要的,而setHorizontalTextPosition
指定相对于图标的文字位置。
答案 4 :(得分: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);
}