Tôi hiện đang sử dụng mã này để tạo một JDialog;Hiển thị JDialog dưới dạng trang tính không hoạt động
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);
}
}
trước đây tôi đã sử dụng Java 6 để biên dịch các ứng dụng và thiết lập các clientProperty apple.awt.documentModalSheet
đang làm việc một cách hoàn hảo để hiển thị hộp thoại như là một "Sheet" trên OSX nhưng bây giờ tôi bắt đầu sử dụng Java 7 (cập nhật 25) và hộp thoại không còn được hiển thị dưới dạng Trang tính. Tôi không thể tìm thấy bất kỳ tài liệu cập nhật về điều này. Họ đã thay đổi bất cứ điều gì về điều này? Làm sao tôi có thể giải quyết việc này? Thiết kế giao diện hiện tại trông tốt hơn với một Sheet hơn là một hộp thoại.
Cập nhật
tôi thấy báo cáo lỗi sau đây mà có vẻ là vấn đề tương tự như tôi đang trải qua;
http://bugs.sun.com/view_bug.do?bug_id=8010197
Có ai biết cách giải quyết vấn đề này không? Tôi đã xem xét các thư viện như QuaQua nhưng tôi không muốn sử dụng bất kỳ thư viện nào vì tôi chỉ muốn chức năng Trang tính.
Cập nhật 2
tôi đã cố gắng QuaQua, nhưng thư viện hiện có vấn đề chính xác tương tự khi soạn thảo với Java 7. Bất kỳ cách giải quyết?
Cập nhật 3
đang thay thế với mẫu làm việc (http://pastebin.com/PJ8VGdPb)
Cập nhật 4
Tìm thấy ra SWT có một phong cách cho lớp Shell tên SWT.SHEET của họ mà vẫn hoạt động trong Java7, tôi không thích sử dụng một thư viện như SWT, nhưng nó có vẻ là giải pháp duy nhất.
Để được trợ giúp tốt hơn sớm hơn, hãy đăng [SSCCE] (http://sscce.org/). –
Theo yêu cầu của bạn; xem liên kết pastbin cho mẫu đang hoạt động. – Thys
Nếu đó là SSCCE, nó đủ ngắn để đăng trực tiếp trong câu hỏi .. –