3

さて、私はこれについて助けを求めてネットをクルージングしてきましたが、私が試したものは何もうまくいかないようです。すべてのメニューテキストをメニューボタンの中央に配置したいと思います。使用setHorizontalTextPosition(JMenu.CENTER)しても変化はありません。実際、私が使用する定数に関係なく、メニューテキストは左寄せのままです。

何か案は?

*アップデート1

まだ運がない。JMenu APIを読み直した後、アイコンに関連するテキストのみを設定し、JMenuでテキストsetHorizontalTextPosition(int)とアイコンの両方の配置を設定することに気付きました。setVerticalTextPosition(int)setHorizontalAlignment(int)setVerticalAlignment(int)

テキストの配置方法は、アイコンとともに使用すると、宣伝どおりに機能するようです。

垂直方向の配置方法は、テキストまたはアイコン、あるいはその両方で機能するようです。

ただし、水平方向の配置方法はまったく機能していないようです。テキストまたはアイコン、あるいはその両方で単独で使用しても、何も変わらないようです。メニューサイズを150x50に増やしましたが、組み合わせに関係なく、テキストやアイコンを取得できず、水平方向の中央に配置できません。

4

5 に答える 5

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

したがって、解決策は次のとおりです。

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 に答える
1

アイコンに相対的なテキスト位置を指定しながらsetHorizontalAlignment、あなたが望むことをすべきだと思います。setHorizontalTextPosition

于 2012-07-30T20:01:33.957 に答える