我有一个自定义类CustomField,它扩展了JPanel。由于我经常需要重用相同的模式,我的自定义类由2个JLabel和2个JComboBox组成。 这很简单;第一个JComboBox有ON / OFF选项,第二个JComboBox只有在第一个设置为“ON”时才可见。我可以管理这部分。 我不知道设计好的部分是CustomField实例在另一个主JFrame类中,在这个JFrame中,只有当CustomField类中的JComboBox设置为“ON”时,某些部分才可见。 ”。我想过使用MouseAdapter,但我不知道这是一个好习惯。
这是我的CustomField类:
public class Main {
CustomField cf = new CustomField("test", "ON, "Test2");
public static void main(String s[]) {
JFrame frame = new JFrame("Application");
JPanel panel = new JPanel();
panel.setLayout(new FlowLayout());
panel.add(cf);
JLabel labelTest = new JLabel("Label that should be visible or not");
panel.add(labelTest);
frame.add(panel);
frame.setSize(300, 300);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
这是主要的JFrame:
import pandas as pd
s = pd.Series(['A', 'B', 'C', 'D'])
len_combination = 5
基本上,我希望labelTest可根据CustomField设置进行更改。按照它的方式,我不能将labelTest放在CustomField类中。
有没有干净的方法来做我想要的?我应该重新设计实际的东西并将所有字段放在同一个类中吗?
谢谢!
答案 0 :(得分:0)
首先,您希望使用CustomField中的方法公开组合框的状态:
public boolean isOn() {
return testCB.getSelectedIndex() == 1;
}
通过查看使用标准JavaBean侦听器模式的各种Swing组件的文档中的方法签名,您可以了解如何监听状态:您将要添加三个公共方法,一个受保护方法:
public void addChangeListener(ChangeListener listener) {
listenerList.add(ChangeListener.class, listener);
}
public void removeChangeListener(ChangeListener listener) {
listenerList.remove(ChangeListener.class, listener);
}
public ChangeListener[] getChangeListeners() {
return listenerList.getListeners(ChangeListener.class);
}
protected void fireChangeListeners() {
ChangeEvent event = new ChangeEvent(this);
for (ChangeListener listener : getChangeListeners()) {
listener.stateChanged(event);
}
}
(listenerList字段继承自JComponent。)
现在,只要您检测到用户更改了On / Off组合框的值,您就可以简单地添加对fireChangeListeners();
的调用 - 也就是说,您需要在ItemListener中调用它。
正如您可能猜到的那样,您的Main类现在可以调用cf.addChangeListener
,并且该侦听器内部会根据cf.isOn()
返回的值调整标签的可见性。
通过阅读these,您可以了解更多信息。