java.awt.Component.getName()
được sử dụng để làm gì? Nó luôn luôn có vẻ là null
trong các ứng dụng tôi xây dựng với NetBeans. Tôi đang nghĩ đến việc lưu trữ một số văn bản trợ giúp cho mỗi thành phần trong đó - Tôi không muốn sử dụng chú giải công cụ, tôi có một bảng điều khiển khác nơi tôi sẽ hiển thị văn bản trợ giúp.java.awt.Component.getName() và setName() được sử dụng để làm gì?
Trả lời
Component.setName (..) được sử dụng trong JDK chủ yếu là do cái nhìn và cảm nhận lớp thực hiện để thiết lập chuỗi ID giống như đối với từng thành phần, ví dụ BasicOptionPaneUI có thể gọi nó trên một thành phần nút để đặt tên của nó là "OptionPane.button".
Phương thức getName() được sử dụng trong phương thức toString() khi đặt tên các thành phần con bên trong thành phần Composite/parent và trong mã ghi nhật ký gỡ lỗi AWT và Swing. Tôi nghi ngờ mạnh mẽ rằng phương thức getName() cũng được sử dụng bởi một số khung kiểm tra AWT/Swing.
Vì vậy, nếu bạn không phải phụ thuộc vào bất kỳ trong những ứng dụng trên của getName(), bạn có thể thử sử dụng nó cho các thông điệp giúp đỡ của bạn, mặc dù tôi không muốn giới thiệu nó.
Có lẽ bạn nên xem xét lại thiết kế của mình? Sử dụng tên để thực hiện một số tra cứu trong một hashmap tải văn bản trợ giúp từ một gói tài nguyên?
Tôi chưa từng thấy nó được sử dụng cho bất kỳ điều gì trong khuôn khổ. Nó hữu ích nếu bạn có các thành phần được truyền vào một phương thức để bạn có thể hỏi tên của họ để quyết định cách xử lý chúng. Ngoài ra, nhiều khung kiểm tra UI sử dụng điều này để cho phép bạn tham khảo các thành phần theo tên trong các kịch bản thử nghiệm. Tôi không thấy bất kỳ lý do gì bạn không thể sử dụng nó cho văn bản trợ giúp mặc dù.
Chúng tôi sử dụng nó để thử nghiệm robot/UI. –
Chúng tôi cũng sử dụng nó cho thử nghiệm robot/UI. – Jason
Ngoài ra, vì tôi nghĩ java.awt.Component là một đối tượng hạng nặng trong X, các chương trình như xwininfo và xwd có thể cho phép bạn chỉ định nó theo tên.
Tôi chỉ cố gắng nó với một JFrame, và setName không đặt tên của cửa sổ, cửa sổ được đặt tên bởi các chuỗi tôi trôi qua trong constructor. Nhưng tôi không có bất kỳ mã ví dụ điển hình nào để kiểm tra, vì vậy tôi có thể sai về những gì tôi đã viết ở trên.
Câu trả lời của Herman Lintvelt đã kết thúc là câu trả lời đúng cho ứng dụng của tôi.
Tôi tạo ra một bó tài nguyên tên HelpText.properties. Nó chứa các cặp name = value. Tôi setName() d từng thành phần của tôi với "tên" từ cặp name = value. Sau đó tôi sử dụng getGlassPane của khung() để chụp tất cả các chuyển động của chuột. Khi một con chuột chạy qua một thành phần được đặt tên, nó tìm kiếm tên trong gói, hiển thị trợ giúp nếu có sẵn và chuyển tiếp chuyển động chuột đến cùng với Thành phần thực tế.
- Nhìn here để biết cách sử dụng ngăn kính.
- Jan Newmarch's web page on using resource bundles rất hữu ích.
- Kevin Riff response đã giúp tôi tìm ra cách tìm gói tài nguyên của mình.
Whew. Chỉ có 2 ngày giá trị dinking xung quanh. Cuối cùng tôi bắt đầu làm quen với
Vui vì tôi có thể giúp. Hãy tận hưởng Java. –
Phương pháp component.getName()
Java :) chủ yếu sử dụng với người nghe. Nếu bạn đặt tên của một thành phần (component.setName(name)
), bạn có thể gọi đến thành phần cụ thể đó từ bên trong một phương thức của Listener
.
Ví dụ:
public void someMethodOfsomeListener(SomeEvent e){
if (e.getComponent().getName().equals(component.getName())
//do stuff...
}
Hãy nhận biết rằng bạn phải thiết lập một cách rõ ràng tên của các thành phần, nếu không nó sẽ trở lại null
.
Nếu bạn có tham chiếu 'thành phần' trong trình nghe, bạn cũng có thể sử dụng' e.getComponent() == component' mà ít bị lỗi hơn. Tôi cũng sẽ cân nhắc việc sử dụng nhiều người nghe. – palacsint
Các thành phần có thể có cùng tên. Đừng nhầm lẫn giữa các thử nghiệm trên cho bình đẳng thành phần. – Jason
Tôi sử dụng nó để xử lý người nghe trong một lớp đơn lẻ. Tôi nhận được như một tham số thành phần chứa object.addListener của tôi không phải là một container nhưng là lớp chứa đối tượng đó. Cảm ơn Vivavinyl vì mẹo đặt tên đầu tiên. Nó rất hữu ích và hiệu quả.
Đây là những gì tôi sử dụng getName() cho:
Frame[] frames = JFrame.getFrames();
for (int i = 0; i < frames.length; ++i) {
//get the frame
Frame frame = frames[i];
if (frame.getName().equals(frameName)) {
//make the frame visible
frame.setVisible(true);
//focus the frame
frame.requestFocus();
//found
return;
}
}
FEST sử dụng tên của một thành phần để xác định nó trong testcases.
Tôi đã tìm kiếm nhiều câu trả lời để nhận tên và tôi nghĩ rằng đây chỉ là giải pháp dễ dàng
public static void main(String[] args) {
ActionListener actionListener = new ActionListener() {
public void actionPerformed(ActionEvent actionEvent) {
String name = actionEvent.getSource().toString();
UserReaction(ObjectName.getComponentVariableName(name), "null");
}
};
Button calculate_btn = new Button("Calculate");
calculate_btn.setName("Calculate");
calculate_btn.addActionListener(actionListener);
}
private static void UserReaction(String objectName) {
if (objectName.equals("Calculate")) {
//do something;
}
}static public String getComponentVariableName(String name) {
String res = (name.substring(name.indexOf("[") + 1));
res = res.split(",")[0];
return res;
}
Điều này không trả lời được câu hỏi nào cả? –
- 1. JavaScript: .extend và .prototype được sử dụng để làm gì?
- 2. Khi nào thuộc tính @JsonProperty được sử dụng và nó được sử dụng để làm gì?
- 3. python được sử dụng để làm gì?
- 4. @@ DEF_SORTORDER_ID được sử dụng để làm gì?
- 5. .data.rel.ro được sử dụng để làm gì?
- 6. nbactions.xml được sử dụng để làm gì?
- 7. Sqlite được sử dụng để làm gì?
- 8. GCC_NO_COMMON_BLOCKS được sử dụng để làm gì?
- 9. + = Được sử dụng để làm gì?
- 10. iframe được sử dụng để làm gì?
- 11. #pragma được sử dụng để làm gì?
- 12. _references.js được sử dụng để làm gì?
- 13. Chức năng remquo làm gì và nó có thể được sử dụng để làm gì?
- 14. Miền ứng dụng được sử dụng để làm gì?
- 15. "Dải" (ứng dụng GCC) được sử dụng để làm gì?
- 16. Tệp kho khóa Android là gì và nó được sử dụng để làm gì?
- 17. Máy nhà nước hữu hạn là gì và nó được sử dụng để làm gì?
- 18. Test-and-Set được sử dụng để làm gì?
- 19. Phần COMDAT được sử dụng để làm gì?
- 20. Thư mục .link_to_grails_plugins được sử dụng để làm gì?
- 21. Khóa reentrance trong java được sử dụng để làm gì?
- 22. Từ khoá 'char' được sử dụng để làm gì?
- 23. Google Analytics '__utm.gif được sử dụng để làm gì?
- 24. Thư mục .git/branches được sử dụng để làm gì?
- 25. Java - "@Override" được sử dụng để làm gì?
- 26. GlVertexAttrib (so với glVertexAttribPointer) được sử dụng để làm gì?
- 27. Android: Android.R.id.content được sử dụng để làm gì?
- 28. Từ khóa python "có" được sử dụng để làm gì?
- 29. STD :: vector :: front() được sử dụng để làm gì?
- 30. Biến $ * của Perl được sử dụng để làm gì?
Cảm ơn Herman - hãy xem câu trả lời của tôi bên dưới về cách tôi đã làm điều đó. – JohnnyLambada