java如何处理控制器(Swing)中的组件?
我使用两种方法创建了一个简单视图,第一种方法将面板上的所有组件放入hashmap,第二种方法按名称获取具有hashmap的组件:
public class AddMaker extends JFrame {
private static HashMap componentMap;
//first
private void createComponentMap(JPanel jPanel) {
componentMap = new HashMap<String,Component>();
Component[] components = jPanel.getComponents();
for (int i=0; i < components.length; i++) {
componentMap.put(i, components[i].getName());
}
}
//second
public static Component getComponentByName(String name) {
if (componentMap.containsValue(name)) {
System.out.println("name " + name );
return (Component) componentMap.get(name);
}
else return null;
}
private JPanel jPanel = new JPanel();
//labels
private JLabel jLabel1 = new JLabel("Add");
public AddMaker(){
setSize(400, 300);
setResizable(false);
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
//set panel layout
jPanel.setLayout(new BoxLayout(jPanel, BoxLayout.Y_AXIS));
//do some align
jLabel1.setName("namee");
jLabel1.setAlignmentX(Component.CENTER_ALIGNMENT);
jPanel.add(jLabel1);
//creating hashmap with components on panel
createComponentMap(jPanel);
//add panel on form
getContentPane().add(jPanel);
}
在我的控制器中,我想得到一些组件,并与他一起做一些事情:
public class AddMakerController {
public JFrame addMaker = new AddMaker();
public AddMakerController(){
JLabel jLabel = (JLabel) AddMaker.getComponentByName("namee");
addMaker.setVisible(false);
}
}
但是当窗体打开时,出现这个错误,有人有想法吗
name namee
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at mvc.controller.AddMakerController.<init>(AddMakerController.java:18)
at mvc.controller.CountryController$1.actionPerformed(CountryController.java:300)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
...
编辑: 我处理此异常,我在控制器中的代码:
public class AddMakerController {
public AddMaker addMaker = new AddMaker();
public AddMakerController(){
Component component = addMaker.getComponentByName("namee");
if (component instanceof JLabel) {
JLabel jLabel = (JLabel) component;
jLabel.setText("l");
addMaker =new AddMaker(); //not edit label on form..
}
}
}
现在,我想更改标签中的文本,如何在控制器中显示此操作的结果
谢谢
共 (0) 个答案