我尝试创建一个组件(父组件),其中包含3个子组件JLabel
作为字段名称,JTextField
和JLabel
表示我的字段错误,如下所示:< / p>
public class YLabel extends JPanel {
public YLabel() {
super();
JLabel name = new JLabel("Some text");
JTextField field = new JTextField();
JLabel error = new JLabel("Error text");
super.add(name);
super.add(field);
super.add(error);
}
}
因此,当我使用此组件时,我无法更改三个组件的属性,我只需更改父组件JPanel
知道我如何使用这个组件以及如何更改所有子组件?
答案 0 :(得分:2)
根据您的方案,您可以检索YLabel面板的子组件,然后修改它们的属性,但是您需要记住子组件的顺序。下面是检索子组件的代码
getBackendData()
答案 1 :(得分:2)
不知道这是否会有所帮助,但是对于某些属性(我不知道有多少?)如果子值为null,则将使用父值
例如:
JLabel label= new JLabel( "hello" );
label.setForeground( null );
label.setFont( null );
JTextField textField = new JTextField(10);
textField.setForeground( null );
textField.setFont( null );
JPanel panel = new JPanel();
panel.setForeground( Color.RED );
panel.setFont( new Font("monospaced", Font.PLAIN, 24) );
panel.add( label );
panel.add( textField );
对于不支持此功能的属性,您需要覆盖面板的setXXX(...)
方法以更新其所有子组件。
编辑:
所以我假设你有一个这样的自定义组件:
public class CustomComponent extends JPanel
{
private JLabel heading = new JLabel(...);
private JTextField textField = new JTextField(5);
private JLabel error = new JLabel(...);
public CustomComponent()
{
add( heading );
add( textField );
add( error );
clearProperties( heading );
clearProperties( textField );
clearProperties( error );
}
private void clearProperties(JComponent component)
{
component.setForeground( null );
component.setFont( null );
}
}
现在,当您使用该组件时,您可以执行以下操作:
CustomComponent component = new CustomComponent();
component.setForeground(...);
component.setFont(..);
使用此方法,您不必覆盖面板的setForeground(...),setFont(...)以将属性应用于每个子组件。
答案 2 :(得分:1)
项目中应该有一个Source and Design按钮,因此当您选择Design按钮时,它可以让您更新所有对象的属性。你有吗?