Tôi có một nút trên JFrame khi nhấp vào Tôi muốn hộp thoại bật lên với nhiều vùng văn bản để nhập người dùng. Tôi đã tìm kiếm tất cả các xung quanh để cố gắng tìm ra cách để làm điều này nhưng tôi cứ ngày càng bối rối hơn. Có ai giúp được không?Java - Cách tạo hộp thoại tùy chỉnh?
Trả lời
Nếu bạn không cần nhiều hành vi tùy chỉnh, JOptionPane là trình tiết kiệm thời gian tốt. Nó sẽ chăm sóc vị trí và nội địa hóa của các tùy chọn OK/Hủy, và là một cách nhanh chóng và bẩn để hiển thị một hộp thoại tùy chỉnh mà không cần phải xác định các lớp học của riêng bạn. Phần lớn thông số "message" trong JOptionPane là một String, nhưng bạn có thể truyền vào một JComponent hoặc một mảng các JComponents.
Ví dụ:
JTextField firstName = new JTextField();
JTextField lastName = new JTextField();
JPasswordField password = new JPasswordField();
final JComponent[] inputs = new JComponent[] {
new JLabel("First"),
firstName,
new JLabel("Last"),
lastName,
new JLabel("Password"),
password
};
int result = JOptionPane.showConfirmDialog(null, inputs, "My custom dialog", JOptionPane.PLAIN_MESSAGE);
if (result == JOptionPane.OK_OPTION) {
System.out.println("You entered " +
firstName.getText() + ", " +
lastName.getText() + ", " +
password.getText());
} else {
System.out.println("User canceled/closed the dialog, result = " + result);
}
This lesson từ hướng dẫn Java giải thích chi tiết từng thành phần Swing, với các ví dụ và liên kết API.
Nếu bạn sử dụng NetBeans IDE (phiên bản mới nhất tại thời điểm này là 6.5.1), bạn có thể sử dụng nó để tạo ứng dụng GUI GUI cơ bản bằng cách sử dụng Tệp-> Dự án mới và chọn danh mục Java sau đó ứng dụng Java Desktop.
Sau khi tạo, bạn sẽ có ứng dụng GUI xương trần đơn giản có chứa một hộp khoảng có thể mở bằng cách sử dụng lựa chọn menu. Bạn sẽ có thể thích nghi điều này với nhu cầu của bạn và tìm hiểu cách mở một hộp thoại từ một nút bấm.
Bạn sẽ có thể chỉnh sửa hộp thoại trực quan. Xóa các mục có ở đó và thêm một số vùng văn bản. Chơi xung quanh với nó và trở lại với nhiều câu hỏi hơn nếu bạn gặp khó khăn :)
Vâng, về cơ bản bạn tạo một JDialog, thêm các thành phần văn bản của bạn và làm cho nó hiển thị. Nó có thể giúp đỡ nếu bạn thu hẹp mà cụ thể bit bạn đang gặp rắc rối với.
Hãy thử lớp đơn giản này để tùy biến một hộp thoại theo ý thích của bạn:
import java.util.ArrayList;
import java.util.List;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JRootPane;
public class CustomDialog
{
private List<JComponent> components;
private String title;
private int messageType;
private JRootPane rootPane;
private String[] options;
private int optionIndex;
public CustomDialog()
{
components = new ArrayList<>();
setTitle("Custom dialog");
setMessageType(JOptionPane.PLAIN_MESSAGE);
setRootPane(null);
setOptions(new String[] { "OK", "Cancel" });
setOptionSelection(0);
}
public void setTitle(String title)
{
this.title = title;
}
public void setMessageType(int messageType)
{
this.messageType = messageType;
}
public void addComponent(JComponent component)
{
components.add(component);
}
public void addMessageText(String messageText)
{
JLabel label = new JLabel("<html>" + messageText + "</html>");
components.add(label);
}
public void setRootPane(JRootPane rootPane)
{
this.rootPane = rootPane;
}
public void setOptions(String[] options)
{
this.options = options;
}
public void setOptionSelection(int optionIndex)
{
this.optionIndex = optionIndex;
}
public int show()
{
int optionType = JOptionPane.OK_CANCEL_OPTION;
Object optionSelection = null;
if(options.length != 0)
{
optionSelection = options[optionIndex];
}
int selection = JOptionPane.showOptionDialog(rootPane,
components.toArray(), title, optionType, messageType, null,
options, optionSelection);
return selection;
}
public static String getLineBreak()
{
return "<br>";
}
}
tôi đã tạo ra một API thoại tùy chỉnh. kiểm tra nó ra ở đây https://github.com/MarkMyWord03/CustomDialog. Nó hỗ trợ hộp tin nhắn và xác nhận. hộp thoại đầu vào và tùy chọn giống như trong joptionpane sẽ sớm được triển khai.
Mẫu Lỗi Dialog từ CUstomDialog API: CustomDialog Error Message
- 1. Tạo hộp thoại tùy chỉnh trong Android
- 2. Làm cách nào để tạo Hộp thoại tùy chỉnh 100%
- 3. Tùy chỉnh hộp thoại Auth
- 4. Tùy chỉnh hộp thoại onbeforeunload
- 5. jqGrid Hộp thoại Chỉnh sửa Tùy chỉnh
- 6. Tạo hiệu ứng cho Hộp thoại tùy chỉnh
- 7. Đặt contentDescription cho hộp thoại tùy chỉnh
- 8. Hộp thoại bộ chọn tùy chỉnh
- 9. Tùy chỉnh hộp thoại bằng cách mở rộng Hộp thoại hoặc AlertDialog
- 10. Cách đặt nút onclicklistener nằm trong hộp thoại tùy chỉnh
- 11. Kích thước hộp thoại cảnh báo hoặc hộp thoại cảnh báo tùy chỉnh
- 12. thay đổi chiều cao của hộp thoại tùy chỉnh trong Hộp thoại
- 13. Xem trước tùy chỉnh cho hộp thoại mở bằng Delphi
- 14. Tôi cần có hộp thoại tùy chỉnh trong Tuỳ chọn
- 15. Cách dễ nhất để tạo hộp thoại tùy chỉnh trả về giá trị?
- 16. Tôi làm cách nào để tạo hộp thoại tùy chỉnh với hai bộ đếm ngày?
- 17. Tạo huyền thoại tùy chỉnh trong ggplot2
- 18. Tùy chỉnh hộp thoại hành động nhanh cho android
- 19. Đặt thuộc tính hộp thoại tùy chỉnh lưu
- 20. Hộp thoại xử lý lỗi tùy chỉnh WPF?
- 21. Cách tạo hộp thoại JavaFX?
- 22. Tab tùy chỉnh trong hộp thoại thuộc tính tệp
- 23. Trả về giá trị tùy chỉnh từ hộp thoại WPF
- 24. getOwnerActivity trả về null trong hộp thoại tùy chỉnh
- 25. Cách tùy chỉnh hộp thư
- 26. Android: Hiển thị hộp thoại tùy chỉnh ở giữa hộp chứa
- 27. Chỉnh sửa hộp thoại liên kết CKEditor để thêm thuộc tính tùy chỉnh vào liên kết
- 28. Cách tạo hộp thoại tải trong Android?
- 29. Cách đúng để triển khai hộp thoại tkinter bật lên tùy chỉnh
- 30. Tạo JButton tùy chỉnh trong Java
Ví dụ này tiếc là không hỗ trợ ví dụ tabbing giữa các trường hoặc nhấn Enter cho "ok". – aioobe
Bạn có thể kiểm soát nhiều hơn hộp thoại bằng cách tạo một JOptionPane bằng cách sử dụng một hàm tạo, sau đó gọi createDialog trên kết quả JOptionPane. Điều này cung cấp cho bạn một JDialog, mà bạn có thể tùy chỉnh thêm trước khi làm cho nó hiển thị. Tại một số điểm mặc dù, nó có ý nghĩa hơn để cuộn thành phần tùy chỉnh của riêng bạn. –
@aioobe Trong JRE của tôi cả hai tabbing dụ và nhấn Enter cho nút OK làm việc (mặc dù rất nhiều thời gian đã trôi qua kể từ khi bình luận của bạn). Tuy nhiên, có một nhược điểm khác là giải pháp này: không có cách nào để phân biệt giữa nút OK được nhấn và cửa sổ hộp thoại đóng lại. Vì vậy, không có cách nào để hủy bỏ hành động của bạn. – Vic