6

JMenuBarをJFrameまたはJRootPaneのデコレーションウィンドウに追加できるかどうか、あるいはコンテンツペインを囲む境界線を追加できるかどうか疑問に思っています。FirefoxやPhotoshopなどのアプリケーションの装飾ウィンドウにメニューバーが表示されます。

これは可能ですか?私はグーグルを見回しました、しかし私はこの種のものに関してどんな結果も見つけることができませんでした。Javaにこの機能があることを期待しています。

4

3 に答える 3

9

探しているものがわかりませんが、 -JFrame.setJMenuBar ()JMenuBarに追加できます。詳細については、メニューの使用方法のチュートリアルを参照してください。JFrame

編集:

以下は、アイデアをデモするための、メニュー付きの装飾されていないフレームの非常に単純化された例です。

既存のソリューションに目を向けることができます-JIDEはResizableFrameこの目的のために持っています。これはオープンソースのJIDE-ossの一部です。Substance L&Fは、タイトルバーのカスタマイズをサポートしています(Substance LaFはどうなりましたか?を参照)。@camickrによるクラスを非常ComponentMoverに効率的に利用することもできます。詳細については、コンポーネントのサイズ変更の記事を参照してください。ComponentResizer

import javax.swing.*;
import java.awt.event.*;
import java.awt.*;

public class UndecoratedFrameDemo {
    private static Point point = new Point();

    public static void main(String[] args) {
        final JFrame frame = new JFrame();
        frame.setUndecorated(true);
        frame.addMouseListener(new MouseAdapter() {
            public void mousePressed(MouseEvent e) {
                point.x = e.getX();
                point.y = e.getY();
            }
        });
        frame.addMouseMotionListener(new MouseMotionAdapter() {
            public void mouseDragged(MouseEvent e) {
                Point p = frame.getLocation();
                frame.setLocation(p.x + e.getX() - point.x,
                        p.y + e.getY() - point.y);
            }
        });

        frame.setSize(300, 300);
        frame.setLocation(200, 200);
        frame.setLayout(new BorderLayout());

        frame.getContentPane().add(new JLabel("Drag to move", JLabel.CENTER),
                BorderLayout.CENTER);

        JMenuBar menuBar = new JMenuBar();
        JMenu menu = new JMenu("Menu");
        menuBar.add(menu);
        JMenuItem item = new JMenuItem("Exit");
        item.addActionListener(new ActionListener(){
            @Override
            public void actionPerformed(ActionEvent e) {
                System.exit(0);
            }
        });
        menu.add(item);
        frame.setJMenuBar(menuBar);

        frame.setVisible(true);
    }
}
于 2012-07-21T04:07:37.360 に答える
2

これを試して...

JFrameへのJMenuBarの追加

JMenuBar menuBar = new JMenuBar();
myFrame.setJMenuBar(menuBar);

JMenuBarをJPanelに追加する

JMenuBar menuBar = new JMenuBar();
myPanel.add(menuBar);

このトピックの詳細については、このJMenuBarチュートリアルのリンクを参照してください。

于 2012-07-21T04:49:25.143 に答える
1

私はいくつかの掘り下げを行いました、そして短い答えは...いいえです。

基本的に、フレーム装飾はOSにオフロードされているため、そのコンテンツにアクセスすることはできません。

ただし、多くの作業を行いたい場合は、独自の装飾を実装できます。ただし、サイズ変更と移動には責任を負う必要があります。

あなたはチェックアウトしたいかもしれません

http://java-swing-tips.blogspot.com.au/2010/05/custom-decorated-titlebar-jframe.htmlおよびhttp://www.paulbain.com/2009/10/13/howto-draggabe- jframe-without-decoration/アイデア用

于 2012-07-22T04:06:50.797 に答える