2

Java Swing アプリケーションの JSeparator でセパレーターを挿入したいときに問題があります。実際のところ、Mac でプログラムを実行したときにこの問題が発生しますが、Windows や Linux では発生しません。セパレーターが正しく配置されておらず、テキストに取り消し線が引かれています。誰かが理由を知っていますか?

私のコード:

JMenuItem fileItem = new JMenuItem("Close");
KeyStroke ...
fileItem.add(new JSeparator(JSeparator.HORIZONTAL),BorderLayout.LINE_START);

スクリーンショット: ここに画像の説明を入力

4

1 に答える 1

6

基本的に、あなたのコードは今あなたがJMenuItemデフォルトを持っていると仮定していることを示していますBorderLayout、それは本当かもしれません(しかし私はそうは思いません)。

根本的な問題は、を追加JSeparatorするJMenuItemことですが、実際には、を介しJMenuてさまざまなsを含むに追加する必要があります。詳細については、セパレータの使用方法を参照してください。JMenuItemJMenu#addSeparator()

次のようなことをする必要があります。

JMenu menu=new JMenu();

JMenuItem item1=new JMenuItem("something 1");
JMenuItem item2=new JMenuItem("something 1");

menu.add(item1);
menu.addSeparator();//lets add that separator
menu.add(item2);

あなたに次のようなものを与える:

ここに画像の説明を入力してください

アップデート:

次に例を示します。

ここに画像の説明を入力してください

import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.SwingUtilities;

public class Test {

    public Test() {
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

        JMenuBar menuBar=new JMenuBar();

        JMenu menu = new JMenu("File");
        JMenu menu2 = new JMenu("Else");

        JMenuItem item1 = new JMenuItem("something 1");
        JMenuItem item2 = new JMenuItem("something 2");
        JMenuItem item3 = new JMenuItem("else 1");
        JMenuItem item4 = new JMenuItem("else 2");

        menu2.add(item3);
        menu2.addSeparator();//lets add that separator
        menu2.add(item4);

        menu.add(menu2);
        menu.add(item1);
        menu.addSeparator();//lets add that separator
        menu.add(item2);

        menuBar.add(menu);

        frame.setJMenuBar(menuBar);
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String args[]) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new Test();
            }
        });
    }
}
于 2013-01-29T19:38:56.153 に答える