使用JButtons

时间:2015-05-23 04:53:01

标签: io nullpointerexception jbutton

public class Node extends JButton {
    private Node rightConnection ;
    private Node downConnection ;
    private Node rightNode ,downNode, leftNode ,upNode;
    private ArrayList<String> buttonImages = new ArrayList<String>();

    public static void connectNodes(ArrayList<Node> nodes) {
        for (int i = 0; i < nodes.size(); i++) {
            nodes.get(i).setRightNode((nodes.get(i).getLocation().x / 150 < Integer.parseInt(SetMap.getMapSize()) - 1) ? nodes.get(i + 1) : null);
            nodes.get(i).setDownNode((nodes.get(i).getLocation().y / 150 < Integer.parseInt(SetMap.getMapSize()) - 1) ? nodes.get(i + Integer.parseInt(SetMap.getMapSize())) : null);
            nodes.get(i).setLeftNode((nodes.get(i).getLocation().x / 150 > 0) ? nodes.get(i - 1) : null);
            nodes.get(i).setUpNode((nodes.get(i).getLocation().y / 150 > 0) ? nodes.get(i - Integer.parseInt(SetMap.getMapSize())) : null);
        }
    }


    public class SetContent {
        private JPanel contentPanel;
        private int imgNum;

        public SetContent() {
            contentPanel = new JPanel(null);

            contentPanel.setLocation(1166, 0);
            contentPanel.setSize(200, 768);

            makeOptionNodes();
        }

        private void makeOptionNodes() {
            MouseListener mouseListener = new DragMouseAdapter();
            for (int row = 0; row < 13; row++) {
                for (int col = 0; col < 2; col++) {
                    Node button = new Node();
                    button.setSize(100, 50);
                    button.setLocation(col * 100, row * 50);

                    ImageIcon img = new ImageIcon("src/com/company/" + this.imgNum++ + ".png");
                    button.setIcon(new ImageIcon(String.valueOf(img)));
                    // to remote the spacing between the image and button's borders
                    //button.setMargin(new Insets(0, 0, 0, 0));
                    // to add a different background
                    //button.setBackground( ... );
                    button.setTransferHandler(new TransferHandler("icon"));
                    button.addMouseListener(mouseListener);
                    contentPanel.add(button);
                }
            }
        }
    }



    public class DragMouseAdapter extends MouseAdapter{
        String name= new String();

        public void mousePressed(MouseEvent e) {
            JComponent c = (JComponent) e.getSource();
            TransferHandler handler = c.getTransferHandler();
            handler.exportAsDrag(c, e, TransferHandler.COPY);

            name = handler.getDragImage().toString();// here is another nullpointerException
            for(int i = 0 ; i< Integer.parseInt(SetMap.getMapSize()) ; i++) {
                if (c.getName().equals(String.valueOf(i))) {
                    ((Node) c).getButtonImages().add(name);
                }
            }
        }
    }


    public class SetMap {
    private static String mapSize;
    private JPanel nodesPanel;
    private ArrayList<Node> nodes;

    public SetMap() {
        nodes = new ArrayList<Node>();
        for (Node node : nodes) {
            node = new Node();
        }
        nodesPanel = new JPanel(null);

        nodesPanel.setLocation(0, 0);
        nodesPanel.setSize(1166, 768);

        this.mapSize = JOptionPane.showInputDialog(null, "enter map size:");

        makeMapNodes();
        Node.connectNodes(this.nodes);
        makeConnections();
    }

    private void makeMapNodes() {
        for (int row = 0; row < Integer.parseInt(this.mapSize); row++) {
            for (int col = 0; col < Integer.parseInt(this.mapSize); col++) {
                final Node button = new Node();
                button.setRightNode(null);
                button.setDownNode(null);
                button.setLeftNode(null);
                button.setUpNode(null);
                button.setRightConnection(null);
                button.setDownConnection(null);

                button.setTransferHandler(new TransferHandler("icon"));
                button.setSize(100, 100);

                button.setLocation(col * 150, row * 150);

                this.nodes.add(button);
                nodesPanel.add(button);

                Node.setNodeName(this.nodes, this.nodes.indexOf(button));

                button.addActionListener(new AbstractAction() {

                    @Override
                    public void actionPerformed(ActionEvent e) {
                        int index = nodes.indexOf(button);
                        nodes.remove(button);
                        Node.setNodeName(nodes, index);

                        button.invalidate();
                        button.setVisible(false);

                        if (button.getLocation().x / 150 < Integer.parseInt(SetMap.getMapSize()) - 1) {
                            button.getRightConnection().invalidate();
                            button.getRightConnection().setVisible(false);
                        }
                        if (button.getLocation().y / 150 < Integer.parseInt(SetMap.getMapSize()) - 1) {
                            button.getDownConnection().invalidate();
                            button.getDownConnection().setVisible(false);
                        }
                        if (button.getLocation().x / 150 > 0) {
                            button.getLeftNode().getRightConnection().invalidate();
                            button.getLeftNode().getRightConnection().setVisible(false);
                        }
                        if (button.getLocation().y / 150 > 0) {
                            button.getUpNode().getDownConnection().invalidate();
                            button.getUpNode().getDownConnection().setVisible(false);
                        }

                    }
                });
            }
        }
    }

    private void makeConnections() {
        for (Node button : this.nodes){
            final Node rightConnection = new Node();
            final Node downConnection = new Node();

            rightConnection.setSize(50, 35);
            downConnection.setSize(35, 50);

            rightConnection.setLocation(button.getLocation().x + 100, button.getLocation().y + 35);
            downConnection.setLocation(button.getLocation().x + 35, button.getLocation().y + 100);

            button.setRightConnection(rightConnection);
            button.setDownConnection(downConnection);

            ImageIcon imgH = new ImageIcon("src/com/company/horizontal.png");
            rightConnection.setIcon(new ImageIcon(String.valueOf(imgH)));
            ImageIcon imgV = new ImageIcon("src/com/company/vertical.png");
            downConnection.setContentAreaFilled(false);
            downConnection.setIcon(new ImageIcon(String.valueOf(imgV)));

            if(button.getLocation().x / 150 != Integer.parseInt(this.mapSize)-1) {
                nodesPanel.add(rightConnection);
            }
            if(button.getLocation().y / 150 != Integer.parseInt(this.mapSize)-1) {
                nodesPanel.add(downConnection);
            }

            rightConnection.addActionListener(new AbstractAction() {

                @Override
                public void actionPerformed(ActionEvent e) {
                    rightConnection.invalidate();
                    rightConnection.setVisible(false);
                }
            });

            downConnection.addActionListener(new AbstractAction() {

                @Override
                public void actionPerformed(ActionEvent e) {
                    downConnection.invalidate();
                    downConnection.setVisible(false);
                }
            });
        }
    }

}


public class File {

    public static void writeInFile(ArrayList<Node> nodes) {
        try {
            FileWriter fileWriter = new FileWriter("G:\\file.txt");

            BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);

            bufferedWriter.write("[" + SetMap.getMapSize() + "]" + "[" + SetMap.getMapSize() + "]");
            bufferedWriter.newLine();

            Iterator itr = nodes.iterator();
            while (itr.hasNext()) {
                Node node = (Node) itr.next();
                if (node != null) {
                    bufferedWriter.write(node.getText());
                    bufferedWriter.newLine();
                    bufferedWriter.write("R" + ((node.getRightConnection() != null) ? node.getRightNode().getText() : null) + " D" + ((node.getDownConnection() != null) ? node.getDownNode().getText() : null) + " L" + ((node.getLeftNode().getRightConnection() != null) ?     node.getLeftNode().getText() : null) + " U" + ((node.getUpNode().getDownConnection() != null) ?     node.getUpNode().getText() : null));//here is the NullPOinterException
                    bufferedWriter.newLine();
                    bufferedWriter.write("image");
                    bufferedWriter.newLine();
                    Iterator it = node.getButtonImages().iterator();
                    while (it.hasNext()){
                        String images = (String) it.next();
                        bufferedWriter.write(" " + images);
                    }
                }
            }
            bufferedWriter.close();
            fileWriter.close();
        } catch (IOException e) {
            System.out.println(e);
        }
    }
}


public class Main {

    public static void main(String[] args) {
        JFrame mainFrame = new JFrame();
        mainFrame.setExtendedState(JFrame.MAXIMIZED_BOTH);
        mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        mainFrame.setLayout(null);

        final SetMap map = new SetMap();
        SetContent options = new SetContent();

        mainFrame.add(map.getNodesPanel());
        mainFrame.add(options.getContentPanel());

        JButton saveButton = new JButton("save");
        saveButton.setSize(100, 25);
        saveButton.setLocation(1050, 10);
        saveButton.addActionListener(new AbstractAction() {
            @Override
            public void actionPerformed(ActionEvent e) {
                File.writeInFile(map.getNodes());
            }
        });

        map.getNodesPanel().add(saveButton);

        mainFrame.setVisible(true);

        JOptionPane.showMessageDialog(null, "choose nodes and connections you want to remove");
    }
}

我试图编写我在mapPanel中添加的某些节点上所做的更改,但在File类中添加了行(已注释),我得到NullPointerException以及类DragMouseAdapter中的另一行我再次获得此异常。 我省略了一些不重要的代码部分。我知道检查代码有很多,但我会感谢在这种情况下的任何简单帮助,因为我在编程中是一个真正的菜鸟。

0 个答案:

没有答案