gpt4 book ai didi

java - 创建一个包含多个组件的 swing 组件

转载 作者:行者123 更新时间:2023-12-01 16:50:42 26 4
gpt4 key购买 nike

我尝试创建一个组件(父组件),其中包含 3 个子组件 JLabel 作为字段名称,以及 JTextFieldJLabel我的字段的错误是这样的:

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

MY Component

知道如何使用此组件以及如何更改所有子组件吗?

编辑 MY COMPONENT

最佳答案

不知道这是否有帮助,但对于某些属性(我不知道有多少?)如果子值为 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(...) 即可将属性应用到每个子组件。

关于java - 创建一个包含多个组件的 swing 组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40682089/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com