大家帮我看看这个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) { } } java导入Access数据库问题 麻烦大家抽出点你们宝贵的时间帮我分析下!谢谢 小小的关于JAVA的问题~~ java.sql.SQLException: The SQL statement must not be null or empty. 自己写的一个线程的简单代码,为什么屏幕上面什么也没有?请教教我 如何使JToolBar设计时停靠在Frame的左(右)边框 mysql 语句 50分 java.sql.SQLException: 流已被关闭 来帮帮忙吧 关于JDBC访问Oracle返回数据集的记录限制的问题 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) {
}
}