2

フレームと境界線はあるが、キャプション ボタン (最小化、復元、閉じる) がない Java で何らかの Window オブジェクトを作成することは可能ですか。

当然設定は使えませんundecorated。さらに、ウィンドウは次のことを行う必要があります。

  • プラットフォームでレンダリングされた境界線を持っている
  • タイトルバーを持つ
  • キャプション ボタンはありません。必要に応じて、ウィンドウをプログラムで破棄します。
  • デフォルトまたはSystemルック アンド フィールを使用する

次に例を示します。

キャプションレス ウィンドウ

4

3 に答える 3

6

これは約です

  1. まともな半透明の形の窓を作成する方法

  2. Compound Bordersで装飾JDialogされていない場合、ネイティブ OS から来たものと同様またはより良い Borders を作成できます

  3. で作成JPanel(またはJLabel#opaque(true))GradientPaint

  4. または(より良いnon_focusable==私の見解)JLabel準備されたIcon

  5. @camickrによるJPanel/コンポーネント ムーバー / コンポーネントJLabelのサイズ変更(これら 2 つのコードを決して混在させないでください) に追加します。

  6. Alpha Transparencyペイント用セットJPanel/JLabelグレート用look and feel

  7. 最も簡単な方法がそこに置かれていますJMenuBar

于 2012-09-05T11:39:47.967 に答える
4

簡単な答えはノーです。

より長い答えはおそらくですが、JNI/JNAの実装を調査する必要があります

于 2012-09-05T10:21:13.923 に答える
2

この小さな例を試してください。JFrameから最小化、最大化、閉じるボタンを削除します(無効にするだけではありません)。

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

class Example {

    public void buildGUI() {
        JFrame.setDefaultLookAndFeelDecorated(true);
        JFrame frame = new JFrame();
        frame.setResizable(false);
        removeButtons(frame);
        JPanel panel = new JPanel(new GridBagLayout());
        JButton button = new JButton("Exit");
        panel.add(button,new GridBagConstraints());
        frame.getContentPane().add(panel);
        frame.setSize(400,300);
        frame.setLocationRelativeTo(null);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
        button.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent a){
                System.exit(0);
            }
        });
    }

    public void removeButtons(Component comp) {
        if(comp instanceof AbstractButton) {
            comp.getParent().remove(comp);
        }
        if (comp instanceof Container) {
            Component[] comps = ((Container)comp).getComponents();
            for(int x=0, y=comps.length; x<y; x++) {
                removeButtons(comps[x]);
            }
        }
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable(){
            public void run(){
                new Example().buildGUI();
            }
        });
    }
}
于 2012-09-05T10:23:53.393 に答える