// 将表情显示到输入框 public void insertExpression(String expressionUrl) { jep_input.insertIcon(new ImageIcon(expressionUrl)); }
public static void main(String[] args) { new ExpressionsWindow(null); } }我这里设置了setFocusable(true)和requestFoucs(),可是还是不行。还有您说的设置父窗口,我不知道怎么设置。可以再详细些。或者写一个简单的JWindow失去焦点的Demo吗?谢谢。
我这个this继承了JWindow
this.addFocusListener(new FocusAdapter() {
@Override
public void focusLost(FocusEvent e) {
System.out.println("lostfocus");
} @Override
public void focusGained(FocusEvent e) {
System.out.println("getfocus");
}
});
是不是哪里写错了,还是少写了什么?
还有在new JWindow时指定下父组件
// 表情图片的数量
private static int expressions_count = 50;
// 表情大小
private static int imageIconWidth = 30;
// 表情窗口的行数和列数
private static int expressions_rows = 6;
private static int expressions_columns = 10;
// 表情窗口的宽度和长度
public static int expressions_width = imageIconWidth * expressions_columns;
public static int expressions_height = imageIconWidth * expressions_rows;
// 表情图片数组
private ImageIcon[] icon_expressions = new ImageIcon[expressions_count];
private JButton[] jb_expressions = new JButton[expressions_count];
// 存放表情容器
private JPanel jp_expressions = new JPanel();
private JScrollPane jsp_expressions = new JScrollPane();
private JList list_expressions;
// 点击的表情
private static String expression_selected;
// 点击的表情的路径名的长度
private static int expression_path_length;
// 表情的名字
private static String expression_name;
// 聊天窗口的输入框
JTextPane jep_input;
public ExpressionsWindow(JTextPane jep_input) {
this.jep_input = jep_input;
initImageIcon();
initWindow();
this.setFocusable(true);
this.requestFocus();
// 添加窗口事件
this.addFocusListener(new FocusAdapter() {
@Override
public void focusLost(FocusEvent e) {
System.out.println("lostfocus");
} @Override
public void focusGained(FocusEvent e) {
System.out.println("getfocus");
}
});
}
// 当前窗口对象
public JWindow getJWindow() {
return this;
} // 加载表情图片
public void initImageIcon() {
for(int i = 0; i < expressions_count; i++) {
ImageIcon imageIcon = new ImageIcon("image/expressions/p" + (i+1) + ".gif");
jb_expressions[i] = new JButton();
jb_expressions[i].setBorder(BorderFactory.createLineBorder(new Color(178,223,238)));
jb_expressions[i].setBackground(Color.WHITE);
jb_expressions[i].setPreferredSize(new Dimension(imageIconWidth,imageIconWidth));
jb_expressions[i].setIcon(imageIcon);
// 添加鼠标事件
jb_expressions[i].addMouseListener(new MouseAdapter() { @Override
public void mouseClicked(MouseEvent e) { // 点击事件
expression_selected = ((JButton)e.getSource()).getIcon().toString();
expression_path_length = expression_selected.length();
expression_name = expression_selected.substring(expression_selected.lastIndexOf("/")+1, expression_path_length);
// 将表情显示到输入框
insertExpression(expression_selected);
// 隐藏表情窗口
getJWindow().setVisible(false);
getJWindow().dispose();
}
});
}
}
// 初始化窗口
public void initWindow() {
list_expressions = new JList(jb_expressions);
list_expressions.setLayoutOrientation(JList.HORIZONTAL_WRAP);
list_expressions.setVisibleRowCount(6);
jp_expressions.setLayout(new GridLayout(expressions_rows,expressions_columns));
for(int i = 0; i < expressions_count; i++) {
jp_expressions.add(jb_expressions[i]);
}
jsp_expressions.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
jsp_expressions.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
jsp_expressions.getViewport().add(jp_expressions);
this.setLayout(new BorderLayout());
this.add(jsp_expressions, BorderLayout.CENTER);
this.setSize(new Dimension(expressions_width,expressions_height));
this.setVisible(true);
}
// 将表情显示到输入框
public void insertExpression(String expressionUrl) {
jep_input.insertIcon(new ImageIcon(expressionUrl));
}
public static void main(String[] args) {
new ExpressionsWindow(null);
}
}我这里设置了setFocusable(true)和requestFoucs(),可是还是不行。还有您说的设置父窗口,我不知道怎么设置。可以再详细些。或者写一个简单的JWindow失去焦点的Demo吗?谢谢。
super(owner);
//写上其他的代码
}
super(ownerFrame);
// 就多了上面一行...其他代码没变
}可是还是不行。