java jtextarea边框_java - JTextArea在java swing中的边框 - 堆栈内存溢出

本文介绍了一种通过抽象的ComponentBuilder模式,为JTextArea定制边框、前景色和背景色的方法。使用继承和策略,创建了TextAreaBuilder,以实现高度可配置的文本区域实例。避免了硬编码布局,提倡与Swing布局管理器配合以获得更好的UI效果。
摘要由CSDN通过智能技术生成

有几种方法可以实现这一点,你可以将事后的边框应用到框架或JTextArea或者你可以根据你的需要为这两种方法提供Border值

我倾向于考虑使用构建器模式,这将允许您提供您感兴趣的属性并生成最终结果。

因为许多属性是在组件之间共享的,所以我很想从一个抽象的实现开始

public abstract class ComponentBuilder, T extends JComponent> {

public static final String BORDER = "border";

public static final String FOREGROUND = "foreground";

public static final String BACKGROUND = "background";

private Map properties = new HashMap<>();

protected abstract B self();

protected void put(String key, Object value) {

properties.put(key, value);

}

public B withBorder(Border border) {

put(BORDER, border);

return self();

}

public B withForeground(Color color) {

put(FOREGROUND, color);

return self();

}

public B withBackground(Color color) {

put(BACKGROUND, color);

return self();

}

public abstract T build();

public O get(String key, Class type, O defaultValue) {

Object value = properties.get(key);

if (value == null) {

return defaultValue;

} else if (value.getClass().isAssignableFrom(type)) {

return (O)value;

}

return defaultValue;

}

protected Border getBorder() {

return get(BORDER, Border.class, null);

}

protected int getInt(String key, int defaultValue) {

return get(key, int.class, defaultValue);

}

protected Color getColor(String key, Color defaultValue) {

return get(key, Color.class, defaultValue);

}

protected Color getForeground() {

return getColor(FOREGROUND, null);

}

protected Color getBackground() {

return getColor(BACKGROUND, null);

}

}

好吧,不要惊慌,这是一些很棒的通用技巧,但相信我,它使整个API非常灵活

现在,您可以包含更多属性,例如字体,但让我们坚持使用一个基本示例。

接下来,我们需要一个文本区域构建器来按照我们想要的方式构建textarea

public class TextAreaBuilder extends ComponentBuilder {

public static final String ROWS = "rows";

public static final String COLUMNS = "columns";

@Override

protected TextAreaBuilder self() {

return this;

}

public TextAreaBuilder withRows(int rows) {

put(ROWS, rows);

return self();

}

public TextAreaBuilder withColumns(int cols) {

put(COLUMNS, cols);

return self();

}

protected int getRows(int defaultValue) {

return getInt(ROWS, defaultValue);

}

protected int getColumns(int defaultValue) {

return getInt(COLUMNS, defaultValue);

}

@Override

public JTextArea build() {

JTextArea ta = new JTextArea();

ta.setColumns(getColumns(0));

ta.setRows(getRows(0));

ta.setBorder(getBorder());

ta.setForeground(getForeground());

ta.setBackground(getBackground());

return ta;

}

}

然后我们可以简单地使用我们想要使用的属性创建一个新的JTextArea ...

JTextArea ta = new TextAreaBuilder().

withColumns(40).

withRows(20).

withBackground(Color.ORANGE).

withForeground(Color.BLACK).

withBorder(BorderFactory.createLineBorder(Color.RED)).

build();

完成!

现在,如果所有看起来“变得困难”,您可以简单地将当前方法更改为需要Border的实例

public JTextArea newTextArea(int rows, int cols, Border border) {

JTextArea ta = new JTextArea(rows, cols);

ta.setBorder(border);

return ta;

}

避免使用null布局,像素完美布局是现代ui设计中的错觉。 影响组件个体大小的因素太多,您无法控制。 Swing旨在与布局管理器一起工作,放弃这些将导致问题和问题的结束,您将花费越来越多的时间来纠正

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值