默认
发表评论 10
想开发IM:买成品怕坑?租第3方怕贵?找开源自已撸?尽量别走弯路了... 找站长给点建议
[已解决] JPopupMenu还是不能实现文本组件可编辑
   虽然3.7的版本的更新说明里说:
     v3.7 更新说明
      发布于:2015-11-13 17:23

1、解决了JPopupMenu中显示的文本组件无法编辑的问题;


  但还是不能实现JPopupMenu里的文本组件可编辑,然后看了源码:org.jb2011.lnf.beautyeye.ch7_popup.TranslucentPopupFactory.java
   的第417行: “setFocusableWindowState(false);”没改为true

  改为true后(setFocusableWindowState(true);) ,又出现一个问题:

   文本组件会一直处于可编辑状态(always Focus),   
   请问大神如何解决

即时通讯网 - 即时通讯开发者社区! 来源: - 即时通讯开发者社区!

文本框一直Focus

文本框一直Focus
21.png
9.png
上一篇:[已回复] jtable 下面添加小计、合计行下一篇:[已回复] 非常好的外观,感谢分享
推荐方案
评论 10
你可以把这段代码放到Eclipse里去执行看看,BeautyEye v3.7里解决了这个老外说的问题(你可以用v3.6对比一下,换个beautyeye的jar包就行)。
不知你描述的问题是否跟老外是一样的,你看看他的代码,或许能给你启发!


》BeautyEye的v3.7版解决的这个问题是老外提出来的,老外反馈的原话是:
The JTextField is not editable. If you remove beautyeye the field becomes editable”

》老外给出的出问题的代码如下:
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.setBackground(new JMenuItem().getBackground()); // panel must have the same background with JMenuItems
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);
        }
    }
);
}
老外的这个代码我调试过,可以执行的,你放到eclipse里去试试,或许能给你启发!
引用:JackJiang 发表于 2016-04-19 09:26
老外的这个代码我调试过,可以执行的,你放到eclipse里去试试,或许能给你启发!

嗯,我用的是beautyeye-3.7,我直接把上面的代码复制过来运行了下,还是不能编辑的,把
org.jb2011.lnf.beautyeye.ch7_popup.TranslucentPopupFactory.java
   的第417行: “setFocusableWindowState(false);” 改为true 后就可以进行编辑
但是,这个文本框就失去不了焦点了,一直onFocus
签名: 是否记得我骄傲地说:这世界我曾经来过
引用:zjj7188 发表于 2016-04-19 16:51
嗯,我用的是beautyeye-3.7,我直接把上面的代码复制过来运行了下,还是不能编辑的,把
org.jb2011.lnf. ...

我确信我当时测过上面给你的代码里是可以编辑的。

你或许更新一下JDK试试?排除一下JDK的原因。我用的JDK是1.6.18
引用:JackJiang 发表于 2016-04-19 17:20
我确信我当时测过上面给你的代码里是可以编辑的。

你或许更新一下JDK试试?排除一下JDK的原因。我用的 ...

我的jdk是jdk1.8.0_45
你的测试的时候源码 org.jb2011.lnf.beautyeye.ch7_popup.TranslucentPopupFactory.java
这里是 setFocusableWindowState(false); ?
我改为true之后才可以编辑
签名: 是否记得我骄傲地说:这世界我曾经来过
引用:zjj7188 发表于 2016-04-19 17:51
我的jdk是jdk1.8.0_45
你的测试的时候源码 org.jb2011.lnf.beautyeye.ch7_popup.TranslucentPopupFactor ...

我靠,我提交的代码忘了设成true了,v3.7里应该是要被设置成true的!
be.png

点评

JackJiang  说:
github和osc git里的v3.7已经重新更新了!  (8 年前)
这个要怎么结贴呀,怎么显示已解决

点评

JackJiang  说:
直接编辑修改标题就行了。我来改吧  (8 年前)
签名: 是否记得我骄傲地说:这世界我曾经来过
引用:zjj7188 发表于 2016-04-26 17:16
这个要怎么结贴呀,怎么显示已解决

好的,谢谢
签名: 是否记得我骄傲地说:这世界我曾经来过
打赏楼主 ×
使用微信打赏! 使用支付宝打赏!

返回顶部