2012-02-20 32 views
23

Tôi gặp vấn đề với JButton trong Java, về cơ bản tôi muốn vô hiệu hóa đường viền của nút (nút được thêm vào JDesktopPane).Vô hiệu hóa đường biên tập trung JButton

Đây là mã của tôi:

JButton j = new JButton("BUTTON"); 
j.setIcon(icon1); //icon1 : icon// 
j.setFocusable(true); 
j.setContentAreaFilled(false); 
j.setBounds(90, 20, 130, 30); 
dtp.add(j); //dtp : JDesktopPane// 

Nó có thể cho phép biên giới biến mất giống như hình ảnh này:

enter image description here

Nhưng khi con chuột của tôi được nhấp (không di chuyển xung quanh) vào nút, có một đường viền "chấm" xung quanh nút, như sau:

enter image description here

Vì vậy, làm thế nào tôi có thể thiết lập các nút để khi tôi không di chuyển chuột xung quanh khu vực nút, nó cho đến khi thiết lập như hình ảnh đầu tiên, nhưng khi tôi di chuyển chuột xung quanh, có hình vuông xung quanh nút (với ánh sáng màu xanh lý lịch)?

+2

* "để đường viền biến mất như hình ảnh này" * Điều này trông rất không trực quan. Điều gì khác * bạn đang làm để gây nhầm lẫn và gây nhầm lẫn cho người dùng cuối kém? –

+0

Vì vậy, từ nào bạn nghĩ tốt nhất trong trường hợp này? Btw, tiếng Anh không phải là ngôn ngữ đầu tiên của tôi. –

+0

Tôi đã đề cập đến nút không biên giới là 'không trực quan', không phải những gì bạn đã viết. Những gì bạn viết khá rõ ràng. Xin lỗi vì bất kỳ sự nhầm lẫn nào. –

Trả lời

0

xem nếu điều này có thể giúp bạn ra Remove border

hoặc có lẽ đây

Border emptyBorder = BorderFactory.createEmptyBorder(); 
yourButton.setBorder(emptyBorder); 
+0

Khi tôi đặt "Border emptyBorder = BorderFactory.createEmptyBorder(); yourButton.setBorder (emptyBorder)"; nó đã cho tôi nút bình thường mà không có bất kỳ ảnh hưởng nào. –

83

Đó không phải là biên giới. Đó là trọng tâm. Bạn có thể xóa nó bằng cách sử dụng:

jButton1.setFocusPainted(false); 
+0

Chính xác những gì tôi đang tìm kiếm. Cảm ơn! – brimborium

+0

:) ............... – zari

1

Tôi không nghĩ rằng làm điều này với thông thường JButton là một ý tưởng hay. Nếu không có gì, nó sẽ không hiển thị tương tự trong các nền tảng khác nhau (Mac & Linux) trong trường hợp bạn dự định hiển thị nút này trong các nền tảng khác nhau. Đối với tất cả các mục đích thực tế, button.setFocusPainted(false); nên xử lý yêu cầu hiện tại của bạn.

Cân nhắc sử dụng số mở rộng JLabel với nút như hành vi (với trình xử lý tác vụ) để tránh sự khác biệt về hành vi.

4

Đây có thể là chủ đề cũ, nhưng tôi giải quyết mỏ với button.setFocusable(false)

hy vọng nó sẽ giúp cho những người có vẫn đang tìm kiếm một số câu trả lời. cổ vũ.

+0

Quan trọng cần lưu ý rằng đây là hành vi mặc định chính xác chỉ dành cho Thanh công cụ. Trong Visual Studio với Windows Forms, ToolStrip có TabStop được đặt thành false theo mặc định. Sử dụng giao diện người dùng của tôi ở trên để loại bỏ các đường viền chấm chấm trên các nút Thanh công cụ và ToggleButtons không bao giờ có chúng trong Windows có hoặc không có tiêu điểm. – Goombert

2

Sau khi đào, tôi đã đưa ra một giải pháp tốt hơn. Đây cũng là lỗi giao diện người dùng phổ biến trong các ứng dụng GTK trên Windows, một trong số đó là GIMP. Nó làm tôi khó chịu vì vậy tôi muốn tìm một sửa chữa toàn cầu sửa chữa tốt hơn so với thiết lập nó trên mọi điều khiển bằng tay.

Cách giải quyết đặt màu cho tiêu điểm trên tất cả các điều khiển chung mà nó không được phép xảy ra trong suốt. Tôi đã đi và thử nghiệm rộng rãi với Windows Forms trong Visual Studio. Các nút Thanh công cụ và ToggleButton không bao giờ nên có đường viền chấm chấm ngay cả khi được lấy nét. Thanh công cụ được cho là setFocusable (false); theo mặc định khi chúng ở trong Windows. Mỗi điều khiển khác nên có đường viền chấm chấm như trong Swing, nhưng chỉ khi được tập trung xoay vòng.

 // Removes the dotted border around controls which is not consistent with Windows 
     UIManager.put("Button.focus", new ColorUIResource(new Color(0, 0, 0, 0))); 
     UIManager.put("ToggleButton.focus", new ColorUIResource(new Color(0, 0, 0, 0))); 

     // ways to remove it from other controls... 
     UIManager.put("CheckBox.focus", new ColorUIResource(new Color(0, 0, 0, 0))); 
     UIManager.put("TabbedPane.focus", new ColorUIResource(new Color(0, 0, 0, 0))); 
     UIManager.put("RadioButton.focus", new ColorUIResource(new Color(0, 0, 0, 0))); 
     UIManager.put("Slider.focus", new ColorUIResource(new Color(0, 0, 0, 0))); 

     // figure out combobox 
     UIManager.put("ComboBox.focus", new ColorUIResource(new Color(0, 0, 0, 0))); 
Các vấn đề liên quan