大家帮我看看这个swing控件怎么实现 我想自定义一个控件,当鼠标点击该控件时会出来输入框,输入文字后敲回车或鼠标点其他地方,该控件就显示刚输入的文字,请问怎么实现,谢谢! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 补充一下:当鼠标点击该控件时,该控件会出来输入框,当输完后该控件又显示文字,即这个控件在JTextField和JLabel之间切换 那也简单么,给Label加一个点击事件,点击后隐藏Lable并显示text,然后text添加失去焦点事件与键盘敲击事件,事件内容其余于上相同,不同的知识添加一个隐藏text再显示Lable的功能。 使用CardLayout切换JLabel/JTextField,JLabel处理鼠标点击切换到JTextFieldJTextField处理回车按下和失去焦点切换到JLabel 我实现了一下发现有些问题,我是把JTextField加入到JLabel当中了,当我点击JLabel后setVisible(false),此时整个JLabel消失了,JTextField就显示不出来了 这个类似于JList/JTable的 Renderer/Editor,可以参考一下JList的实现。 试试这个例子.....还需要改善很多import java.awt.BorderLayout;import java.awt.FlowLayout;import java.awt.event.MouseAdapter;import java.awt.event.MouseEvent;import java.awt.event.MouseListener;import java.awt.event.MouseMotionListener;import javax.swing.*; public class 控件切换测试 { JFrame frame =new JFrame ("控件切换测试"); JPanel panel=new JPanel(); static JTextField txtField=new JTextField(7); static JLabel lblLabel =new JLabel(" ",JLabel.LEFT); JLabel infoLabel=new JLabel("姓名:"); 控件切换测试(){ panel.setLayout(new FlowLayout()); panel.add(infoLabel); panel.add(txtField); panel.add(lblLabel); txtField.setVisible(false); // txtField.setVisible(true); txtField.addMouseListener( new MouseTestListener()); lblLabel.setVisible(true); lblLabel.addMouseListener(new MouseTestListener()); // BorderLayout borderLAY=new BorderLayout(); // frame.setLayout(borderLAY); // frame.add(panel,borderLAY.CENTER); frame.add(panel); frame.setVisible(true); frame.setSize(400, 300); frame.setLocationRelativeTo(null); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } public static void main(String a[]){ new 控件切换测试(); } } class MouseTestListener implements MouseListener { public void mouseEntered(MouseEvent e) { if (e.getSource()==控件切换测试.txtField){ System.out.println("鼠标进入了文本框!"); 控件切换测试.lblLabel.setVisible(false); 控件切换测试.txtField.setVisible(true); }else if(e.getSource()==控件切换测试.lblLabel){ System.out.println("鼠标进入了标签!"); 控件切换测试.lblLabel.setVisible(false); 控件切换测试.txtField.setVisible(true); } } public void mouseExited(MouseEvent e) { if (e.getSource()==控件切换测试.txtField){ System.out.println("鼠标离开了文本框!"); 控件切换测试.lblLabel.setVisible(true); if(控件切换测试.txtField.getText().trim().equals("")){ 控件切换测试.lblLabel.setText(" "); //如果文本框为空,要把Label的文本设置成几个空格,不然就不能再监听鼠标事件了 }else{ 控件切换测试.lblLabel.setText( 控件切换测试.txtField.getText()); } 控件切换测试.txtField.setVisible(false); }else if(e.getSource()==控件切换测试.lblLabel){ System.out.println("鼠标离开了标签!"); 控件切换测试.lblLabel.setVisible(true); if(控件切换测试.txtField.getText().trim().equals("")){ 控件切换测试.lblLabel.setText(" ");//如果文本框为空,要把Label的文本设置成几个空格,不然就不能再监听鼠标事件了 }else{ 控件切换测试.lblLabel.setText( 控件切换测试.txtField.getText() ); } 控件切换测试.txtField.setVisible(false); } } public void mouseClicked(MouseEvent e) { } public void mousePressed(MouseEvent e) { } public void mouseReleased(MouseEvent e) { } } 关于多线程 执行顺序 表达式语言 FEl-0.3发布(执行速度是JEXL的10倍) 请教一个题目,请大家帮忙解决下!谢谢 Java中double型变量相乘错误 我有一个JFrame,想知道怎么在点击按钮后画图 Swing 中JList 获取 focus 請問我這樣定義數組錯了嗎﹖ 南京的JAVA程序员都拿多少钱? 请教一个关于java中连接远程oracle数据库的问题 Java中把A文本文件中的一行用|隔开的数字排序后再写到B文本文件中该怎么写代码呢? Java的Data类元素 一道Java面试的疑惑。
JTextField处理回车按下和失去焦点切换到JLabel
import java.awt.FlowLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;import javax.swing.*; public class 控件切换测试 {
JFrame frame =new JFrame ("控件切换测试");
JPanel panel=new JPanel();
static JTextField txtField=new JTextField(7);
static JLabel lblLabel =new JLabel(" ",JLabel.LEFT);
JLabel infoLabel=new JLabel("姓名:");
控件切换测试(){
panel.setLayout(new FlowLayout());
panel.add(infoLabel);
panel.add(txtField);
panel.add(lblLabel);
txtField.setVisible(false);
// txtField.setVisible(true);
txtField.addMouseListener( new MouseTestListener());
lblLabel.setVisible(true);
lblLabel.addMouseListener(new MouseTestListener());
// BorderLayout borderLAY=new BorderLayout();
// frame.setLayout(borderLAY);
// frame.add(panel,borderLAY.CENTER);
frame.add(panel);
frame.setVisible(true);
frame.setSize(400, 300);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String a[]){
new 控件切换测试();
}
}
class MouseTestListener implements MouseListener {
public void mouseEntered(MouseEvent e) {
if (e.getSource()==控件切换测试.txtField){
System.out.println("鼠标进入了文本框!");
控件切换测试.lblLabel.setVisible(false);
控件切换测试.txtField.setVisible(true);
}else if(e.getSource()==控件切换测试.lblLabel){
System.out.println("鼠标进入了标签!");
控件切换测试.lblLabel.setVisible(false);
控件切换测试.txtField.setVisible(true);
}
}
public void mouseExited(MouseEvent e) {
if (e.getSource()==控件切换测试.txtField){
System.out.println("鼠标离开了文本框!");
控件切换测试.lblLabel.setVisible(true);
if(控件切换测试.txtField.getText().trim().equals("")){
控件切换测试.lblLabel.setText(" "); //如果文本框为空,要把Label的文本设置成几个空格,不然就不能再监听鼠标事件了
}else{
控件切换测试.lblLabel.setText( 控件切换测试.txtField.getText());
}
控件切换测试.txtField.setVisible(false);
}else if(e.getSource()==控件切换测试.lblLabel){
System.out.println("鼠标离开了标签!");
控件切换测试.lblLabel.setVisible(true);
if(控件切换测试.txtField.getText().trim().equals("")){
控件切换测试.lblLabel.setText(" ");//如果文本框为空,要把Label的文本设置成几个空格,不然就不能再监听鼠标事件了
}else{
控件切换测试.lblLabel.setText( 控件切换测试.txtField.getText() );
}
控件切换测试.txtField.setVisible(false);
} } public void mouseClicked(MouseEvent e) {
}
public void mousePressed(MouseEvent e) {
}
public void mouseReleased(MouseEvent e) {
}
}