Ich verwende derzeit diesen Code, um einen JDialog zu erstellen;Anzeige von JDialog als Blatt funktioniert nicht
package com.kamuara.reposync.window;
import java.awt.Dialog;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.UIManager;
public class SheetDialog {
private JFrame _windowFrame;
public static void main(String[] args) {
System.setProperty("apple.awt.documentModalSheet", "true");
System.setProperty("apple.awt.brushMetalLook", "true");
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
new SheetDialog();
} catch (Exception e) {
e.printStackTrace();
}
}
public SheetDialog() {
_windowFrame = new JFrame();
_windowFrame.setResizable(false);
_windowFrame.setBounds(100, 100, 451, 320);
_windowFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
_windowFrame.getContentPane().setLayout(null);
_windowFrame.setVisible(true);
JButton showDialogButton = new JButton("Show Dialog");
showDialogButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
showSheetDialog(_windowFrame, "Test", "This should be a sheet dialog", "Oke");
}
});
showDialogButton.setBounds(328, 263, 117, 29);
_windowFrame.getContentPane().add(showDialogButton);
}
public void showSheetDialog(JFrame owner, String title, String message, String button) {
final JDialog messageDialog = new JDialog(owner, title, Dialog.ModalityType.DOCUMENT_MODAL);
messageDialog.setBounds(30, 0, owner.getWidth() - 60, 130);
// TODO: only when os is osx
messageDialog.getRootPane().putClientProperty("apple.awt.documentModalSheet", "true");
messageDialog.setLayout(null);
int offsetX = 25;
JLabel titleLabel = new JLabel(title);
titleLabel.setFont(new Font("Lucida Grande", Font.BOLD, 13));
titleLabel.setBounds(offsetX, 10, 100, 25);
messageDialog.getContentPane().add(titleLabel);
JLabel messageLabel = new JLabel(message);
messageLabel.setVerticalTextPosition(JLabel.TOP);
messageLabel.setHorizontalTextPosition(JLabel.LEFT);
messageLabel.setFont(new Font("Lucida Grande", Font.PLAIN, 11));
messageLabel.setBounds(offsetX, 10, messageDialog.getWidth() - 10, messageDialog.getHeight() - 60);
messageDialog.getContentPane().add(messageLabel);
JButton okButton = new JButton(button);
okButton.setBounds(messageDialog.getWidth() - 105, messageDialog.getHeight() - 35, 100, 25);
okButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
messageDialog.dispose();
}
});
messageDialog.getContentPane().add(okButton);
messageDialog.setVisible(true);
}
}
ich zuvor mit Java 6, um die Anwendung zu kompilieren und die Einstellung der clientProperty apple.awt.documentModalSheet
war perfekt funktioniert der Dialog als „Blatt“ auf OSX angezeigt, aber jetzt habe ich angefangen mit Java 7 (Update 25) und den Dialog wird nicht mehr als Blatt angezeigt. Ich finde keine Update-Dokumentation zu diesem Thema. Haben sie etwas daran geändert? Wie kann ich das lösen? Das aktuelle Interface-Design sieht mit einem Sheet viel besser aus als ein Dialog.
aktualisieren
fand ich den folgenden Fehlerbericht, die das gleiche Problem scheint zu sein, wie ich erlebe;
http://bugs.sun.com/view_bug.do?bug_id=8010197
Wer weiß, wie diese zu lösen? Ich habe in Bibliotheken wie QuaQua geschaut, aber ich würde lieber keine Bibliothek verwenden, weil ich nur die Blatt-Funktionalität will.
Update 2
Ich versuchte Quaqua, aber die Bibliothek derzeit genau das gleiche Problem, wenn es mit Java 7. Alle Abhilfen Kompilieren?
aktualisieren 3
Ersetzt Code mit Beispielarbeits (http://pastebin.com/PJ8VGdPb)
aktualisieren 4
SWT Fand heraus, hat einen Stil für ihre Shell-Klasse namens SWT.SHEET, die funktioniert immer noch in Java7, ich bevorzuge nicht eine Bibliothek wie SWT, aber es scheint die einzige Lösung zu sein.
Für bessere Hilfe, früher, ein [SSCCE] (http://sscce.org/). –
Auf Ihre Anfrage; Sehen Sie sich den Pastbin-Link für ein funktionierendes Beispiel an. – Thys
Wenn es ein SSCCE ist, ist es kurz genug, um direkt in der Frage zu schreiben. –