作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有个问题。我可以在体 MousePressed 中创建玻璃板吗?如果是的话,有人可以给我写信吗?我的意思是我按下鼠标按钮,玻璃板是可见的,我可以在他身上作画。
编辑
好的,我现在有了我想要的。当我单击鼠标按钮时,我的玻璃 Pane 正在创建,当我释放此按钮时,它会消失。现在我还有一个问题。我应该在哪里创建我的绘画方法。我想使用鼠标拖动在这个玻璃 Pane 上绘制矩形。我必须在哪里实现paint方法?在其他类(class)还是在本次事件中?我实现了一个我的尝试绘画功能,但我不知道这是否是好方法。这是我的代码:
public class Selection extends JPanel
{
static Point startPoint;
public static void GUI()
{
final JFrame frame = new JFrame();
JPanel panel = new JPanel();
JButton button = new JButton("Select");
final JPanel glassPane = new JPanel();
frame.setSize(400, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
panel.add(button);
glassPane.setOpaque(false);
frame.add(panel);
frame.setGlassPane(glassPane);
glassPane.addMouseListener(new MouseAdapter()
{
@Override
public void mousePressed(MouseEvent e)
{
super.mousePressed(e);
System.out.println("f.getGlassPane() mousePressed");
if(e.getButton() == MouseEvent.BUTTON1)
frame.getGlassPane().setVisible(true);
startPoint=e.getPoint();
Graphics2D g = null;
Graphics2D g2 = (Graphics2D) g;
Rectangle2D rect = new Rectangle2D.Double();
rect.setFrameFromDiagonal(e.getPoint().x, e.getPoint().y,startPoint.x, startPoint.y);
g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.5F));
g2.setColor(Color.BLUE);
g2.fill(rect);
g2.draw(rect);
}
});
glassPane.addMouseMotionListener(new MouseMotionListener() {
@Override
public void mouseDragged(MouseEvent e)
{
}
@Override
public void mouseMoved(MouseEvent e) {
// TODO Auto-generated method stub
}
});
frame.addMouseListener(new MouseAdapter()
{
@Override
public void mousePressed(MouseEvent e)
{
super.mousePressed(e);
if(e.getButton() == MouseEvent.BUTTON1)
frame.getGlassPane().setVisible(true);
}
public void mouseReleased(MouseEvent e)
{
frame.getGlassPane().setVisible(false);
}
});
frame.setVisible(true);
}
int x1, x2, y1,y2;
public void paintComponent(Graphics g)
{
Graphics2D g2 = (Graphics2D)g;
g2.drawRect(x1,y1, x2, y2);
}
public static void main(String[] args)
{
GUI();
}
}
最佳答案
您好check out my answer to some other question在那里我提出了一种可以使用玻璃 Pane 来模拟对话行为的方法。在那里你已经展示了如何在我的情况下鼠标右键单击时显示和隐藏它。这个例子应该能让你很好地开始。
关于swing - 创建玻璃板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5990113/
我是一名优秀的程序员,十分优秀!