2012-02-04 38 views
5

Có thể phủ một Nút lên Nhãn trong Swing không?Lớp phủ một JButton qua JLabel trong Java Swing?

Ví dụ: nếu có JLabel có hình ảnh và không có văn bản và tôi muốn che phủ nút của tôi trên JLabel này. Nhãn được định nghĩa như sau:

myLabel = new javax.swing.JLabel(new ImageIcon(myPicture)); 

Nếu không, thì có ý tưởng nào làm sao tôi có thể nhận ra điều này, cảm ơn bạn.

EDIT: Thật sự tôi đọc về việc thêm JPanel đến một JLabel, khi tôi thêm một Panel với bố trí nút, nó biên dịch tốt, nhưng không có gì là rõ ràng, chỉ là JLabel với hình ảnh

UPDATE: Như đã đề cập bởi @ hoang tưởng-android, bằng cách nào đó tôi đã giải quyết được vấn đề của tôi. Tuy nhiên tôi vẫn phải biết làm thế nào tôi có thể tùy chỉnh vị trí của các thành phần được xếp chồng lên trên JLabel vì tôi không có nhiều kiểm soát (có lẽ vì tôi thường sử dụng netbeans để vẽ bố trí, và điều này đòi hỏi phải viết mã cứng).

Something Như thế này làm việc:

ImagePanel(Image image, int id) { 
    this.image = image; 
    this.tile = false; 

    JButton backButton = new JButton(); 
    JButton nextButton = new JButton(); 
    backButton.setText(" BACK "); 
    nextButton.setText(" NEXT "); 


    add(backButton); 
    add(nextButton); 

}; 

@Override 
public void paintComponent(Graphics g) { 
    super.paintComponent(g); 
    g.drawImage(image, 0, 0, getWidth(), getHeight(), this); 
} 
+0

Bạn đang cố gắng tạo JButton không có đường viền? Hoặc một JLabel có thể nhấp? – Raceimaztion

+0

@Raceimaztion, tôi có JLabel với Image được đặt trong một khung Undecorated, vì vậy mà trên màn hình bạn chỉ thấy hình ảnh mà không có bất kỳ biên giới hay bất cứ điều gì. Bây giờ tôi muốn thêm các tùy chọn khác bằng cách chồng chúng lên trên hình ảnh này, có thể tôi cần phải thử với hình ảnh trong một Panel, nhưng tôi muốn biết là cái gì đó có thể thực hiện được những gì tôi đã hỏi? – Johnydep

+0

Báo cáo lại nội dung hoạt động và những gì không hoạt động. :) – rtheunissen

Trả lời

9

Bạn có thể làm điều đó bằng cách sử dụng JLayeredPane, mặc dù nếu tôi hiểu đúng, cách tốt nhất để làm điều đó sẽ ghi đè lên paintComponent:

// as part of your JPanel 
@Override 
public void paintComponent(Graphics g){ 
    super.paintComponent(g); 
    g.drawImage(background, 0, 0, this); 
} 

Sau đó, bạn có thể thêm các thành phần vào bảng điều khiển theo ý muốn mà không cần đến số JLabel.

2

Bạn có thể chồng lên nút và nhãn, nhưng bạn sẽ phải làm điều này với bố cục cố định. Bạn có thể kéo nếu tắt với gridBagLayout, nhưng tôi nghi ngờ nó.

Dưới đây là thông tin thêm về những gì bạn cần.

http://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html

+0

Trên thực tế tôi đã thử nó nhưng GridBagLayout không thực sự cho phép chồng chéo. – Johnydep