将画布的某个区域设置为可单击

时间:2017-04-01 04:30:18

标签: java swing

我需要一个这样的例子: 我有一块帆布。它不断刷新,我想让这个画布的一个区域可以点击,就像画布的某个矩形区域可点击,但不是整个画布。

2 个答案:

答案 0 :(得分:2)

您可以使用LayerLayout,您可以将组件添加到彼此之上

  

分层窗格是提供第三维的Swing容器   用于定位组件:深度,也称为Z顺序。添加时   如果是分层窗格的组件,则将其深度指定为整数。   数字越大,组件越接近"顶部"位置   在容器内。如果组件重叠,那么"更接近"组件   被绘制在较低深度的组件之上。关系   在相同深度的组件之间由它们的位置确定   在深度内。

答案 1 :(得分:2)

一种简单的方法是添加透明按钮,你想要"背景"可点击:

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);
    }
}