簡體   English   中英

將畫布的某個區域設置為可單擊

[英]Set a certain area of a canvas to be clickable

我需要一個例子:我有一塊畫布。 它不斷刷新,我想使此畫布的某個區域可點擊,就像畫布的某個矩形區域可點擊,而不是整個畫布一樣。

您可以使用LayerLayout ,可以在彼此之上添加組件

分層窗格是一個Swing容器,它提供了用於定位組件的第三維:深度,也稱為Z順序。 將組件添加到分層窗格時,可以將其深度指定為整數。 數字越高,組件越接近容器內的“頂部”位置。 如果組件重疊,則“較近”的組件將以較低的深度繪制在組件頂部。 在相同深度處的組件之間的關系取決於它們在深度內的位置。

一種簡單的方法是添加透明按鈕,您希望在該按鈕上單擊“背景”:

import java.awt.Color;
import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.WindowConstants;

public class APanel extends JPanel{

    APanel(){
        setPreferredSize(new Dimension(600,400));
        setBackground(Color.YELLOW); //panel color to make it distinct

        //add button
        JButton btn = new JButton();
        btn.setPreferredSize(new Dimension(100,30)); //use layout manager to place it where you want
        btn.setContentAreaFilled(false);//make btn transparent
        btn.setCursor(new Cursor(Cursor.HAND_CURSOR));//change button cursor
        //optionally : remove border by btn.setBorder(null);

        btn.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                System.out.println("button pressed !");
            }
        });
        add(btn);   
    }

    public static void main(String[] args){

        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);

        JPanel panel = new APanel();
        frame.getContentPane().add(panel);
        frame.pack();
        frame.setVisible(true);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM