Java SWT 文本框 垂直 居中
2016-08-10 16:56
267 查看
项目需要一个垂直居中的text,翻了很多帖子,没发现有实现。
自己写一个。
具体用法和SWT Text的用法一样,当然没有把所有的text的功能加入。如果有发现还有常用的功能未曾实现,可以@我
代码如下:
package test;
/**
* NewText:支持垂直居中的Text;
* 说明:不支持换行;
* @author Ray
*/
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ControlEvent;
import org.eclipse.swt.events.ControlListener;
import org.eclipse.swt.events.FocusEvent;
import org.eclipse.swt.events.FocusListener;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.events.MouseListener;
import org.eclipse.swt.events.MouseTrackListener;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.events.VerifyListener;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Cursor;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Text;
public class NewText extends Composite implements ControlListener, MouseTrackListener, MouseListener {
private Text text;
private int style;
private Color textBackground;
private Color background;
private int rightPadding = 0;
private int leftPadding = 0;
public NewText(Composite parent, int style) {
super(parent, style);
this.style = style;
this.setCursor(new Cursor(Display.getDefault(), SWT.CURSOR_IBEAM));
createText(style);
textBackground = text.getBackground();
background =new Color(getDisplay(), 255, 255, 255);
super.setBackground(background);
addControlListener(this);
addMouseTrackListener(this);
addMouseListener(this);
textAddListener();
}
private void createText(int style) {
if (hasBorder())
text = new Text(this, setBorderBitTo0(style));
else
text = new Text(this, style);
}
private void textAddListener() {
text.addMouseTrackListener(this);
text.addFocusListener(new FocusListener() {
@Override
public void focusLost(FocusEvent e) {
setLostBackground();
}
@Override
public void focusGained(FocusEvent e) {
setGainedBackground();
}
});
}
/**
* 去掉style中的SWT.BORDER
*
* @return
*/
private int setBorderBitTo0(int style) {
return style & ~SWT.BORDER;
}
/**
* 判断传入的style是否包含边框
*
* @return
*/
private boolean hasBorder() {
return (style & SWT.BORDER) != 0;
}
@Override
public Point computeSize(int wHint, int hHint, boolean changed) {
Point pt = text.computeSize(wHint, hHint);
return new Point(pt.x + 4, pt.y + 4);
}
@Override
public void controlMoved(ControlEvent e) {
}
@Override
public void controlResized(ControlEvent e) {
setTextBounds();
}
private int getY() {
return (getSize().y - text.getSize().y) / 2;
}
private void setTextBounds() {
text.pack();
if (hasBorder()) {
text.setLocation(2 + leftPadding, getY() - 2);
text.setSize(getBounds().width - 8 + (rightPadding + leftPadding), text.getSize().y);
} else {
text.setLocation(0 + leftPadding, getY());
text.setSize(getBounds().width - 2 + (rightPadding + leftPadding), text.getSize().y);
}
}
@Override
public void pack() {
text.pack();
if (hasBorder()) {
setSize(text.getSize().x + 4, text.getSize().y + 8);
} else {
setSize(text.getSize().x, text.getSize().y);
}
}
public void setText(String string) {
text.setText(string);
}
public void setFont(Font font) {
text.setFont(font);
setTextBounds();
}
public String getText() {
return text.getText();
}
public void selectAll() {
text.selectAll();
}
public boolean forceFocus() {
return text.forceFocus();
}
public boolean setFocus() {
return text.setFocus();
}
@Override
public void setBackground(Color color) {
textBackground = color;
background = color;
super.setBackground(color);
text.setBackground(color);
}
@Override
public void setForeground(Color color) {
super.setForeground(color);
text.setForeground(color);
}
@Override
public void addFocusListener(FocusListener listener) {
text.addFocusListener(listener);
}
public void addSelectionListener(SelectionListener listener) {
text.addSelectionListener(listener);
}
public void addModifyListener(ModifyListener listener) {
text.addModifyListener(listener);
}
public void addVerifyListener(VerifyListener listener) {
text.addVerifyListener(listener);
}
private void setGainedBackground() {
super.setBackground(textBackground);
}
private void setLostBackground() {
super.setBackground(background);
}
@Override
public void mouseDown(MouseEvent e) {
relocate(e);
}
public void relocate(MouseEvent me) {
if (me.widget != this)
return;
final Point pt = getDisplay().map(this, null, me.x, getSize().y / 2);
Event event = new Event();
event.widget = text;
event.type = SWT.MouseMove;
event.x = pt.x;
event.y = pt.y;
getDisplay().post(event);
event.type = SWT.MouseDown;
event.button = 1;
getDisplay().post(event);
event.type = SWT.MouseUp;
getDisplay().post(event);
}
@Override
public void mouseUp(MouseEvent e) {
}
@Override
public void mouseEnter(MouseEvent e) {
}
@Override
public void mouseExit(MouseEvent e) {
}
@Override
public void mouseHover(MouseEvent e) {
}
@Override
public void mouseDoubleClick(MouseEvent e) {
}
public int getRightPadding() {
return rightPadding;
}
public void setRightPadding(int rightPadding) {
this.rightPadding = rightPadding;
}
public int getLeftPadding() {
return leftPadding;
}
public void setLeftPadding(int leftPadding) {
this.leftPadding = leftPadding;
}
}
自己写一个。
具体用法和SWT Text的用法一样,当然没有把所有的text的功能加入。如果有发现还有常用的功能未曾实现,可以@我
代码如下:
package test;
/**
* NewText:支持垂直居中的Text;
* 说明:不支持换行;
* @author Ray
*/
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ControlEvent;
import org.eclipse.swt.events.ControlListener;
import org.eclipse.swt.events.FocusEvent;
import org.eclipse.swt.events.FocusListener;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.events.MouseListener;
import org.eclipse.swt.events.MouseTrackListener;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.events.VerifyListener;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Cursor;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Text;
public class NewText extends Composite implements ControlListener, MouseTrackListener, MouseListener {
private Text text;
private int style;
private Color textBackground;
private Color background;
private int rightPadding = 0;
private int leftPadding = 0;
public NewText(Composite parent, int style) {
super(parent, style);
this.style = style;
this.setCursor(new Cursor(Display.getDefault(), SWT.CURSOR_IBEAM));
createText(style);
textBackground = text.getBackground();
background =new Color(getDisplay(), 255, 255, 255);
super.setBackground(background);
addControlListener(this);
addMouseTrackListener(this);
addMouseListener(this);
textAddListener();
}
private void createText(int style) {
if (hasBorder())
text = new Text(this, setBorderBitTo0(style));
else
text = new Text(this, style);
}
private void textAddListener() {
text.addMouseTrackListener(this);
text.addFocusListener(new FocusListener() {
@Override
public void focusLost(FocusEvent e) {
setLostBackground();
}
@Override
public void focusGained(FocusEvent e) {
setGainedBackground();
}
});
}
/**
* 去掉style中的SWT.BORDER
*
* @return
*/
private int setBorderBitTo0(int style) {
return style & ~SWT.BORDER;
}
/**
* 判断传入的style是否包含边框
*
* @return
*/
private boolean hasBorder() {
return (style & SWT.BORDER) != 0;
}
@Override
public Point computeSize(int wHint, int hHint, boolean changed) {
Point pt = text.computeSize(wHint, hHint);
return new Point(pt.x + 4, pt.y + 4);
}
@Override
public void controlMoved(ControlEvent e) {
}
@Override
public void controlResized(ControlEvent e) {
setTextBounds();
}
private int getY() {
return (getSize().y - text.getSize().y) / 2;
}
private void setTextBounds() {
text.pack();
if (hasBorder()) {
text.setLocation(2 + leftPadding, getY() - 2);
text.setSize(getBounds().width - 8 + (rightPadding + leftPadding), text.getSize().y);
} else {
text.setLocation(0 + leftPadding, getY());
text.setSize(getBounds().width - 2 + (rightPadding + leftPadding), text.getSize().y);
}
}
@Override
public void pack() {
text.pack();
if (hasBorder()) {
setSize(text.getSize().x + 4, text.getSize().y + 8);
} else {
setSize(text.getSize().x, text.getSize().y);
}
}
public void setText(String string) {
text.setText(string);
}
public void setFont(Font font) {
text.setFont(font);
setTextBounds();
}
public String getText() {
return text.getText();
}
public void selectAll() {
text.selectAll();
}
public boolean forceFocus() {
return text.forceFocus();
}
public boolean setFocus() {
return text.setFocus();
}
@Override
public void setBackground(Color color) {
textBackground = color;
background = color;
super.setBackground(color);
text.setBackground(color);
}
@Override
public void setForeground(Color color) {
super.setForeground(color);
text.setForeground(color);
}
@Override
public void addFocusListener(FocusListener listener) {
text.addFocusListener(listener);
}
public void addSelectionListener(SelectionListener listener) {
text.addSelectionListener(listener);
}
public void addModifyListener(ModifyListener listener) {
text.addModifyListener(listener);
}
public void addVerifyListener(VerifyListener listener) {
text.addVerifyListener(listener);
}
private void setGainedBackground() {
super.setBackground(textBackground);
}
private void setLostBackground() {
super.setBackground(background);
}
@Override
public void mouseDown(MouseEvent e) {
relocate(e);
}
public void relocate(MouseEvent me) {
if (me.widget != this)
return;
final Point pt = getDisplay().map(this, null, me.x, getSize().y / 2);
Event event = new Event();
event.widget = text;
event.type = SWT.MouseMove;
event.x = pt.x;
event.y = pt.y;
getDisplay().post(event);
event.type = SWT.MouseDown;
event.button = 1;
getDisplay().post(event);
event.type = SWT.MouseUp;
getDisplay().post(event);
}
@Override
public void mouseUp(MouseEvent e) {
}
@Override
public void mouseEnter(MouseEvent e) {
}
@Override
public void mouseExit(MouseEvent e) {
}
@Override
public void mouseHover(MouseEvent e) {
}
@Override
public void mouseDoubleClick(MouseEvent e) {
}
public int getRightPadding() {
return rightPadding;
}
public void setRightPadding(int rightPadding) {
this.rightPadding = rightPadding;
}
public int getLeftPadding() {
return leftPadding;
}
public void setLeftPadding(int leftPadding) {
this.leftPadding = leftPadding;
}
}
相关文章推荐
- 把网站链接卖一个好价钱: Text Link Ads 注册网赚攻略
- MSSQL数据库获取TEXT字段的内容长度
- 用css实现图片垂直居中的使用技巧
- 『jQuery』.html(),.text()和.val()的概述及使用
- JavaScript开发者必备的10个Sublime Text插件
- 点击button获取text内容并改变样式的js实现
- CSS图片响应式 垂直水平居中
- JQuery中Text方法用法实例分析
- jQuery中text() val()和html()的区别实例详解
- jQuery获取Select选择的Text和Value(详细汇总)
- jquery+ajax+text文本框实现智能提示完整实例
- jQuery操作Select选择的Text和Value(获取/设置/添加/删除)
- firefox下获取下列框选中option的text的代码
- JS获取下拉列表所选中的TEXT和Value的实现代码
- js获取TreeView控件选中节点的Text和Value值的方法
- mssql查找备注(text,ntext)类型字段为空的方法
- 对text数据类型不支持代码页转换 从: 1252 到: 936
- JS获取select的value和text值的简单实例
- MAC 系统如何使用 Sublime Text 2 直接编译运行 java 代码
- MySQL中TEXT与BLOB字段类型的区别