2

MacとWindowsの両方で動作する必要のあるプログラムを作成しました。GUIに関しては、Windowsでは問題ないように見えますが、MacではJFrameが小さすぎます。私はGridBagレイアウトを使用しましたが、絶対値を使用しているものはありません。これは、この問題と同様の回答で提案されています。pack()を使用してみましたが、このGUIでは正しく機能しません。メニューバーに収まるようにフレームのサイズを変更することもありません。setSize(X、Y)を使用していますが、ユーザーがMacを使用しているかどうかを確認し、それに応じてサイズを変更する方法はありますか?また、setMinimumSize()を使用してからpack()を使用してみましたが、packはとにかく何もしません。

これが私のフレームコードビットです。pack()が機能しないために何か問題が発生した場合に備えて。

try {
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
    } catch (Exception e) { }

    try {
        timeCodeMask = new MaskFormatter(" ## : ## : ## : ## ");
    } catch(ParseException e) {
        errorMessage("Warning!", "Formatted text field hasn't worked, text fields will not be formatted.");
    }

    try {
        activePanel = new JPanelSwapper("src/bg.png");
    } catch(IOException e) {
        errorMessage("Warning!", "Background image has not loaded, continuing without one.");
    }

    FPS = 24;

    calculatorPanel = calculatorPanel();
    converterPanel = converterPanel();

    activePanel.setPanel(calculatorPanel());
    previousTimes = new TimeStore();
    resultTimes = new TimeStore();
    previousConversions = new TimeStore();

    frame = new JFrame("TimeCode Calculator & Converter");
    ImageIcon frameIcon = new ImageIcon("src/frame icon.png");
    frame.setIconImage(frameIcon.getImage());
    frame.setExtendedState(JFrame.NORMAL);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        //frame.setSize(WIDTH, HEIGHT);
        //frame.pack();
        frame.setMinimumSize(new Dimension(WIDTH, HEIGHT));
        frame.pack();
        frame.setResizable(false);

    frame.setJMenuBar(menuBar());
    frame.getContentPane().add(activePanel);
    frame.setBackground(Color.WHITE);
    frame.setVisible(true);

    screen = Toolkit.getDefaultToolkit().getScreenSize();
    frame.setLocation((screen.width - WIDTH) / 2, (screen.height - HEIGHT) / 2);

前もって感謝します!

4

1 に答える 1

5

システムプロパティで使用されているオペレーティングシステムを確認できます。

例えば:

System.getProperty("os.name"); //returns name of os as string
System.getProperty("os.version"); //returns version of os as string
System.getProperty("os.arch"); //returns architecture of os as string

条件と照らし合わせて確認してください。

public String getOS() {
    String os = System.getProperty("os.name").toLowerCase();

    if(os.indexOf("mac") >= 0){
       return "MAC";
    }
    else if(os.indexOf("win") >= 0){
       return "WIN";
    }
    else if(os.indexOf("nix") >= 0 || os.indexOf("nux") >= 0){
       return "LINUX/UNIX";
    }
    else if(os.indexOf("sunos") >= 0){
       return "SOLARIS";
    }
于 2012-05-26T17:56:31.263 に答える