Search code examples
javaswinglook-and-feel

BeautyEye LaF JTextField in JPopupMenu is disabled


I'm using the BeautyEye Laf for a Java Swing application. I'm setting a JTextField inside a JPopupMenu. The JTextField appears disabled no matter what I do. The code is a bit complicated but I've made this snippet that's easily testable

public static void main(String[] s)
throws Exception 
{
    BeautyEyeLNFHelper.frameBorderStyle = BeautyEyeLNFHelper.FrameBorderStyle.generalNoTranslucencyShadow;
    org.jb2011.lnf.beautyeye.BeautyEyeLNFHelper.launchBeautyEyeLNF();

    final JPopupMenu popupTable = new JPopupMenu();
    // find panel
    JLabel findLabel = new JLabel("Filter for:");
    findLabel.setPreferredSize(new Dimension(60, 20));
    final JTextField findTextField = new JTextField();
    findTextField.setColumns(10);

    final JPanel container = new JPanel();
    container.setLayout(new FlowLayout(FlowLayout.LEFT, 10, 0));
    container.add(findLabel);
    container.add(findTextField);

    popupTable.add(container);

    JButton button = new JButton("Action");

    JPanel buttonPanel = new JPanel();
    buttonPanel.setLayout(new FlowLayout(FlowLayout.CENTER));
    buttonPanel.add(button);

    JPanel panel = new JPanel();
    panel.setLayout(new BorderLayout());
    panel.add(popupTable, BorderLayout.CENTER);
    panel.add(buttonPanel, BorderLayout.SOUTH);

    final JFrame frame = new JFrame();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(900, 800);
    frame.getContentPane().setLayout(new BorderLayout());
    frame.getContentPane().add(panel, BorderLayout.CENTER);
    frame.setVisible(true);

    button.addActionListener
    (
        new ActionListener()
        {
            public void actionPerformed(ActionEvent e)
            {
                int x = (frame.getWidth() / 2);
                int y = (frame.getHeight() / 2);

                popupTable.show(frame, x, y);
            }
        }
    );
}

If I remove the LaF (comment the first two lines) everything works as expected. The JTextField is editable. I'm asking here first in hope that I'm doing something wrong. If this proves to be a bug I will post this as an issue on Github.


Solution

  • In the end it was a minor change in the library. From the author:

    You can find class org.jb2011.lnf.beautyeye.ch7_popup.TranslucentPopupFactory source code at line 416, change "setFocusableWindowState(false);" to "setFocusableWindowState(true);" or just delete this line.