有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案