相关疑难解决方法(0)

使用JButton在Java中创建自定义按钮

我正在尝试创建一个具有自定义形状(六边形)的按钮,但其他方式就像普通的JButton一样(也就是说,与ActionListener一起使用).

我创建了一个扩展AbstractButton的类,但是当我单击它时它似乎没有向ActionListener发送事件.如果我更改类以扩展JButton它可以很好地工作,但它会搞砸按钮的显示方式.我假设有一个方法需要覆盖以使其触发事件,但我无法弄清楚它是什么.

java user-interface swing jbutton actionlistener

41
推荐指数
4
解决办法
6万
查看次数

焦点所有者临时更改为null

我对Swing开发很新,希望我的问题不是一个愚蠢的问题.

我有一个以下问题.我正在跟踪焦点KeyboardFocusManager,听取属性permanentFocusOwner变化.但是,当焦点从一个控件变为另一个控件时,我会将permanentFocusOwner属性的中间更改为null.

当焦点位于其中一个面板或其子面板内时,我当前的UI逻辑正在对控件进行一些更改.然而,获得中间null打破这个逻辑.

我在谷歌搜索有关此问题的信息,没有发现任何相关信息.

问题是,这种行为是否是设计的,以及是否有某种方法可以解决中间空值.

这是再现上述行为的最小应用程序:

import java.awt.*;
import java.beans.*;
import javax.swing.*;

public class FocusNullTest extends JFrame {

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                FocusNullTest self = new FocusNullTest();
                self.setVisible(true);
            }
        });
    }

    public FocusNullTest() {
        setSize(150, 100);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        Container contentPane = getContentPane(); 
        contentPane.setLayout(new BoxLayout(contentPane, BoxLayout.X_AXIS));

        contentPane.add(new JButton("1"));
        contentPane.add(new JButton("2"));

        KeyboardFocusManager focusManager =
            KeyboardFocusManager.getCurrentKeyboardFocusManager();
        focusManager.addPropertyChangeListener(
                "permanentFocusOwner",
                new PropertyChangeListener() {
                    @Override
                    public void propertyChange(PropertyChangeEvent …
Run Code Online (Sandbox Code Playgroud)

java swing focus

5
推荐指数
1
解决办法
2484
查看次数

为什么我的ChangeListener只对JMenu做出反应,而不是对JMenuItem做出反应?

现在,我有一个JMenu,还有一些JMenuItems.当JMenu和JMenuItem的状态更改为"selected"时,我希望我的程序执行一些操作.我不使用MouseLitener的MouseOver,因为我希望用户也可以使用键盘在菜单中导航.现在,我写了这个监听器:

class MenuItemListener implements ChangeListener {
    @Override
    public void stateChanged(ChangeEvent arg0) {
        JMenuItem item = (JMenuItem) arg0.getSource();
        if(item.isSelected())
            System.out.println(item.getText()+" pressed!");
    }
}
Run Code Online (Sandbox Code Playgroud)

当我将这个监听器添加到JMenu时,它可以正常工作,但是当我将它添加到JMenuItem时,没有任何反应......当我删除if语句以便监听器对两者做出反应时,当菜单被选中并且被选中时我对JMenu以及对于JMenuItem.所以,正如我所见,JMenuItem无法"通过"isSelected()测试......但是什么可能是个问题呢?:S

java swing jmenuitem jmenu changelistener

4
推荐指数
1
解决办法
1716
查看次数