在Swing应用程序中,我有许多子面板,每个子面板都听一个JSlider.周围的父面板也会监听所有子面板.为了在下面的示例中获得一致的结果,我必须首先添加父级,然后添加本地侦听器.考虑到本文中规定EventListenerList和解释的顺序,这是有道理的.我可以依赖该订单,还是应该安排发送不同的活动?
class SubPanel extends JPanel implements ChangeListener {
private final JSlider slider = new JSlider();
private final JLabel label = new JLabel();
private final String name;
private float value;
public SubPanel(String name, float value, ChangeListener parent) {
this.name = name;
this.value = value;
...
slider.addChangeListener(parent);
slider.addChangeListener(this);
}
...
}
Run Code Online (Sandbox Code Playgroud)
附录:讨论EventListenerList似乎是实施建议而不是保证.pstanton建议的链接方法更可靠地强制执行正确的顺序.例如,SubPanel的ChangeListener可以简单地将事件转发到父.
@Override
public void stateChanged(ChangeEvent e) {
...
parent.stateChanged(e);
}
Run Code Online (Sandbox Code Playgroud) 我不知道如何解决这个问题。我正在开发一个图形编辑器,可以在其中绘制圆弧(线)。我手动将弧组件的大小设置为 1000x1000,因此在拖放此弧时我不必更改它。然后我将所需尺寸的弧线绘制到该组件中。每个弧组件都安装了鼠标侦听器。问题是,只有最上面的圆弧组件才能获得鼠标消息。此外,我在 JPane 本身上安装了一个鼠标单击侦听器,但是最上层组件上的鼠标单击侦听器只是获取所有事件......描述这个问题有点困难,所以我将为您提供简单的图像

所以第一个解决方案是以某种方式将收到的消息转发到位于其下的组件,但是我不知道如何做到这一点,所以你有什么想法吗?
第二种解决方案是,不要为圆弧对象设置恒定尺寸,而是以某种方式旋转圆弧所在的矩形,我的意思是这样。

然而,仍然可能存在重叠问题。
那么,您对如何解决这个问题有什么想法吗?或者如果您有任何其他想法,如何解决这个问题,我很高兴,我只需要正确的弧线会对鼠标点击做出反应。
我不认为我的代码会以某种方式有所帮助,但它是
arcObject.setSize(1000, 1000); // !
Run Code Online (Sandbox Code Playgroud)
然后,在这个组件中,我画了一个圆弧
toX = o2.x - 24 * Math.cos(theta);
toY = o2.y - 24 * Math.sin(theta);
g2.draw(new Line2D.Double(toX, toY, o1.x, o1.y));
Run Code Online (Sandbox Code Playgroud) 我必须根据键盘上按下的向上/向下箭头键向上/向下移动单元格。我正在添加KeyListener(实际上KeyAdapter)以JTable使用该方法来实现它keyPressed()。现在发生的事情是,当我按下字母数字键时,我可以使用 获取所选行table.getSelectedRow(),但是当我按下箭头键时,它总是给我“-1”。这意味着没有显示选择的行。我也尝试将焦点设置在桌子上,但没有成功。我使用的代码如下:
private void settingKeys() {
controller.getStandardActionDetailsTableEquates().addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
System.out.println("key pressed!!");
controller.getStandardActionDetailsTableEquates().setRowSelectionAllowed(true);
int selectedRow = controller.getStandardActionDetailsTableEquates().getSelectedRow();
System.out.println("selectedRow : " + selectedRow);
controller.getStandardActionDetailsTableEquates().requestFocusInWindow();
if (e.getKeyCode() == KeyEvent.VK_UP) {
System.out.println("up arrow key pressed");
Component editor = controller.getStandardActionDetailsTableEquates().getEditorComponent();
editor.requestFocusInWindow();
System.out.println("cursor : " + controller.getStandardActionDetailsTableEquates().getCursor());
System.out.println("value : " + controller.getStandardActionDetailsTableEquates().getSelectedRow());
} else if (e.getKeyCode() == KeyEvent.VK_DOWN) {
System.out.println("down arrow key pressed");
}
}
});
}
Run Code Online (Sandbox Code Playgroud)
我什至尝试获取光标位置,但无法获取。另外,编辑器发现不起作用(如代码所示)。“所选行”和“值”值固定为“-1”。
请提供解决方案。