作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。
想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。
8年前关闭。
Improve this question
我正在尝试开发一个带有 Swing 的 GUI 界面,其中组件可以通过监听器与其他组件进行通信。我遇到的问题是:-
方法
PaintPanel p=(PaintPanel) getTargetPanel();
p.setMousePressed(true);
p.setMouseCoords(e.getPoint());
}
public void mouseReleased(MouseEvent e) {
PaintPanel p=(PaintPanel) getTargetPanel();
p.setMousePressed(false);
}
public JPanel getTargetPanel() {
return targetPanel;
}'
最佳答案
您不必使用任何类型的静态变量。您应该创建 JPanel 的子类来处理绘画,并在此类中提供一个方法供监听器与之通信:
public class MyPanel extends JPanel {
// status used for drawing, can be anything you want, but let's say you need to know if the mouse is pressed.
private boolean isMousePressed;
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
// do your stuff here, using isMousePressed
}
public void setMousePressed(boolean pressed) {
isMousePressed= pressed;
}
}
public class PaintingMouseListener implements MouseListener {
private final JPanel targetPanel;
public PaintingMouseListener(JPanel targetPanel) {
this.targetPanel = targetPanel;
}
@Override
public void mousePressed(MouseEvent e) {
targetPanel.setMousePressed(true);
}
@Override
public void mouseReleased(MouseEvent e) {
targetPanel.setMousePressed(false);
}
// other methods of the listener
}
MyPanel targetPanel = new MyPanel();
// assign the mouse listener to whatever component needs it.
component.addMouseListener(new PaintingMouseListener(targetPanel));
isMousePressed
)和 View (MyPanel)放在一起。对于这么简单的东西,把它们放在一起更简单,但随着事情变得越来越复杂,最好把它们分开,把模型放在一个类中。
关于java - 你如何处理java swing组件事件而不制作凌乱的类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17490696/
我是一名优秀的程序员,十分优秀!