Tôi đã xác thực ứng dụng xoay chạy trên applet dành cho mac osx.Các vấn đề tập trung với các hộp thoại phương thức java7 trên mac osx
Trong xác nhận này, tôi tìm thấy những vấn đề sau đây với các hộp thoại modal:
- Khi một hộp thoại được mở và là setModal (true) nó ngăn chặn các nội dung của cửa sổ gốc, nhưng nếu bạn nhấp vào nơi nào đó trên cửa sổ gốc, hộp thoại nằm dưới nó, nhưng nó sẽ vẫn ở trên cùng của cửa sổ gốc.
- Nếu hộp thoại có JTextInputField, nó không nhận được tiêu điểm ngay cả khi bạn nhấp vào nó.
Vì vậy, tôi đã tạo một chương trình nhỏ để hiển thị sự cố. Bạn có thể giúp tôi hiểu điều gì sai ở đây không?
package com.macosx.tests;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class DialogExample extends JApplet{
private static final long serialVersionUID = 1L;
private JPanel panel;
private JButton openDialogBtn;
private void doStart() {
panel = new JPanel();
panel.setPreferredSize(new Dimension(500,500));
openDialogBtn = new JButton("open dialog");
openDialogBtn.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent arg0) {
ModalDialog dialog = new ModalDialog(panel, true);
dialog.setVisible(true);
}
});
panel.add(openDialogBtn);
setContentPane(panel);
}
class ModalDialog extends JDialog {
private static final long serialVersionUID = 1L;
public ModalDialog(Component parent, boolean modal) {
Dimension dimensionParentFrame = parent.getSize();
setSize(new Dimension((parent == null) ? 300 : dimensionParentFrame.width/2, 75));
setModal(modal);
setModalityType(ModalityType.APPLICATION_MODAL);
JTextField txtField = new JTextField();
add(txtField, BorderLayout.CENTER);
}
}
@Override
public void start() {
try {
SwingUtilities.invokeAndWait(new Runnable() {
public void run() {
doStart();
}
});
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
Sử dụng ở trên để tạo tệp .jar (test.jar). Khi đã xong, hãy tạo tệp html có nội dung sau:
<html>
<head>
<title>Dialog test Applet</title>
</head>
<body>
<applet id="DialogTestApplet" height="800" width="600"
code="com.macosx.tests.DialogExample"
archive="test.jar">
</applet>
</div>
</body>
</html>
Khi việc này được thực hiện, hãy chạy tệp html. Bạn sẽ thấy một applet với một nền màu xám và với một nút. Sau đó, hãy thử:
- nhấp vào nút để mở hộp thoại. Sau đó, nhấp vào một nơi nào đó trên vùng màu xám: hộp thoại nằm trong cửa sổ trình duyệt nhưng nó sẽ vẫn ở trên cùng, phải không?
- nhấp vào nút để mở hộp thoại. Sau đó bấm vào trường văn bản của hộp thoại và cố gắng viết một cái gì đó: textdialog không nhận được tiêu điểm.
Vì vậy, tôi đang làm gì sai ở đây? Có thể ai đó với một máy tính mac thử nghiệm này xin vui lòng?
Cảm ơn
Specs:
java.vendor Oracle Corporation
java.version 1.7.0_07
os.name Mac OS X
os.version 10.7.4
browser firefox 15
Chú ý: xin vui lòng lưu ý rằng đây chỉ xảy ra khi applet chạy trên trình duyệt và chỉ trên Mac OSX.
Không thể sao chép trên 10.5/1.6. – trashgod
Đối với tôi, sử dụng 10.7/1.6.0_33 Tôi vẫn thấy vấn đề phương thức (1) nhưng không phải là vấn đề trọng tâm (2). –
Vấn đề tương tự nhưng trên ubuntu [stackoverflow] (http://stackoverflow.com/questions/12373140/java-applet-jtextfield-inaccesible-after-jdialog-on-ubuntu). – user1307657