有没有可能创建一个自定义版本的swing组件,比如jbutton,来限制对某些jbutton方法的访问?
我想要有一个jbutton (或各种swing元素),在这里我定义了一些不能改变的元素和可以改变的元素。以jbutton为例,我希望允许类的用户向按钮添加文本或图像,设置其启用或禁用,或设置大小等,但我希望定义按钮的外观,而不是进行修改。
如果我使用我的自定义类扩展jbutton,我只能用不支持的异常覆盖我不想修改的每个方法。如果我扩展J组件,我将不得不重写基本上所有的jbutton。有没有更好的方法?
我之所以这样问,是因为我们正在制作一组客户端可以用来构建hmi屏幕的自定义J组件。我们希望根据我们的外观和hmi标准来限制元素。
发布于 2019-07-03 14:37:56
你可以扩展一个JPanel或者包装你的按钮(或者这两者都有)。
第一个变体
public class MyButton extends JPanel {
private JButton button = new JButton();
public MyButton() {
init();
}
// probably some another constructors.
private void init() {
setLayout(new GridLayout()); // button take the entire place of the panel
add(button);
}
public void setText(String text) {
button.setText(text);
}
}第二个变体:
public class MyButton {
private JButton button = new JButton();
public MyButton() {
}
// probably some another constructors.
public JComponent getComponent() {
return button;
}
public void setText(String text) {
button.setText(text);
}
}这两个变体都允许您隐藏受限制的功能,而无需重新实现JButton或在覆盖的方法中抛出异常。您还可以将这两种变体或其中的每一种变体与抛出受限方法的异常结合起来(这可能很有趣,因为一些有经验的开发人员可以通过将方法getComponent()的结果转换为JButton来访问getComponent()对象)。
https://stackoverflow.com/questions/56861519
复制相似问题