Java Swing 学习中遇到的问题记录

问题一、焦点在单元格时,点击保存按钮获取不到正在编辑单元格的数据

原因:用户正在编辑单元格时,点击table之外的组件,单元格还是处于编辑状态,此时如果点击的是“保存”按钮,由于单元格并没有接受用户的输入,导致当前编辑的单元格的值为null,用户输入的数据没有保存。

同时,由于表格中的所有单元格是共用一个CellEditor,当用户新建一行时,通常会让光标移动到新建的行的某一个单元格,此时原来正在编辑的

单元格就会替换到新增加的行中,而之前单元格的输入的内容没有保存。因此,在触发其他操作之前,最好能够取消表格正在编辑的状态。

该问题的详解,请点击该链接

解决方法:

方法一:

JTable  table = new JTable();

table.setClientProperty("terminateEditOnFocusLost",Boolean.TRUE);

该方法在最小化时,失效;

方法二:

if(table.isEidting)

        table.getCellEidtor().stopCellEidting();

 这种方法,根据需要来设置,比如需要在点击【保存】按钮时,获取整个table数据,就可以在这个按钮上添加事件处理;

 

问题二、取消窗体默认的Java咖啡图标、三个默认按钮(最小化、最大、退出)

 

JFrame frame = new JFrame();

frame.setUndecorated(true);

设置完该属性之后,窗体不能移动、不能缩小、放大、关闭;

2.1、实现窗体移动功能(要点:起始位置、移动距离)

   给窗体添加2个监听器:

1、MouseListener();

实现方法:

mousePressed(MouseEvent e);

在该方法中记录,在鼠标刚按下时mouse的坐标(得到移动的初始位置);

Point start = e.getPoint();

 

2、MouseMotionListener();

实现方法:

mouseDragged();//窗体被拖动时触发的事件;

得到移动终点mouse位置,Point end = e.getPoint();

得到组件(frame)移动起点位置:

Point fStart  = getLocation();

组件最终位置的坐标计算公式 :起始坐标+移动向量=终点坐标

int fEndx =  fStart .x +(end.x - start.x);

int fEndy =  fStart.y +(end.y-start.y);

setLocation(fEndx ,fEndy );//设置组件最终位置;

2.2、窗体放大到全屏和还原(要点:放大前位置、放大前大小)

放大的原理很简单,就是将窗体的size设置成整个屏幕的大小,填充整个屏幕;

因此问题关键:得到屏幕的size;通过方法:

Dimension d = Toolkit.getDefaultToolkit().getScreenSize();

在放大填充全屏时,调用:

frame.setBounds(0,0,d.width,d.height);//这里注意,应该把frame位置设置为(0,0),这样才可以填充整个屏幕;如若不设置frame位置,由于frame初始位置不在(0,0)因此在屏幕中可以看到空白部分;

 

还原到放大前的状态:需要知道:放大前位置、放大前大小;因此在放大前保存大小和位置即可;

frame.setBounds(oldx,oldy,old.width,old.height);

 

问题三、如何隐藏button的边框、button被点击之后button中字体的边框

 

设置button属性:

setBorderPainted(false);//隐藏:button边框;

setFocusPainted(false);//隐藏:button被点击时字体周围显现的边框

 

问题四:在有布局管理器时,如何设置组件的大小;

 

setPreferredSize(new Dimension(xx,xx));

 

问题五、如何隐藏table中的某一列

 

table.getTableHeader().getColumnModel().getColumn(1).setMinWidth(0);
table.getTableHeader().getColumnModel().getColumn(1).setMaxWidth(0);

将要隐藏列的列宽:最大值、最小值设置为0;

这个列子中选中table的第二列隐藏

 

 

 

猜你喜欢

转载自blog.csdn.net/m0_37550986/article/details/80557106