2

I'm doing project in eclipse, I did the swing part. But now, i wish to use Netbeans to do the Swing part of the project as its easier to do and i'll be able to do it more neatly as I am not experienced much with swing and its layout Managers. Here is an example i found on stackoverflow which consists of some swing components.

import java.awt.*;
import java.awt.event.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.net.*;
import java.util.HashMap;
import java.util.Map;
import javax.imageio.ImageIO;
import javax.swing.*;

public class MoveIcon extends JPanel {

    private static final long serialVersionUID = 1L;
    private static final String IMAGE_PATH = "http://duke.kenai.com/misc/Bullfight.jpg";
    private static final String IMAGE_PATH_PLAYER = "http://duke.kenai.com/iconSized/duke4.gif";
    public static final int STEP = 3;
    private static final int TIMER_DELAY = STEP * 8;
    private BufferedImage bkgrndImage = null;
    private BufferedImage playerImage = null;
    private Map<Direction, Boolean> directionMap = new HashMap<Direction, Boolean>();
    private int playerX = 0;
    private int playerY = 0;

    enum Direction {

        UP(KeyEvent.VK_UP, 0, -1), DOWN(KeyEvent.VK_DOWN, 0, 1),
        LEFT(KeyEvent.VK_LEFT, -1, 0), RIGHT(KeyEvent.VK_RIGHT, 1, 0);
        private int keyCode;
        private int xDirection;
        private int yDirection;

        private Direction(int keyCode, int xDirection, int yDirection) {
            this.keyCode = keyCode;
            this.xDirection = xDirection;
            this.yDirection = yDirection;
        }

        public int getKeyCode() {
            return keyCode;
        }

        public int getXDirection() {
            return xDirection;
        }

        public int getYDirection() {
            return yDirection;
        }
    }

    public MoveIcon() {
        try {
            URL bkgrdImageURL = new URL(IMAGE_PATH);
            URL playerImageURL = new URL(IMAGE_PATH_PLAYER);
            bkgrndImage = ImageIO.read(bkgrdImageURL);
            playerImage = ImageIO.read(playerImageURL);
            setPreferredSize(new Dimension(bkgrndImage.getWidth(), bkgrndImage.getHeight()));
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        for (Direction direction : Direction.values()) {
            directionMap.put(direction, false);
        }
        setKeyBindings();
        Timer timer = new Timer(TIMER_DELAY, new TimerListener());
        timer.start();
    }

    private void setKeyBindings() {
        InputMap inMap = getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
        ActionMap actMap = getActionMap();
        for (final Direction direction : Direction.values()) {
            KeyStroke pressed = KeyStroke.getKeyStroke(direction.getKeyCode(), 0, false);
            KeyStroke released = KeyStroke.getKeyStroke(direction.getKeyCode(), 0, true);
            inMap.put(pressed, direction.toString() + "pressed");
            inMap.put(released, direction.toString() + "released");
            actMap.put(direction.toString() + "pressed", new AbstractAction() {

                private static final long serialVersionUID = 1L;

                @Override
                public void actionPerformed(ActionEvent e) {
                    directionMap.put(direction, true);
                }
            });
            actMap.put(direction.toString() + "released", new AbstractAction() {

                private static final long serialVersionUID = 1L;

                @Override
                public void actionPerformed(ActionEvent e) {
                    directionMap.put(direction, false);
                }
            });
        }

    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        if (bkgrndImage != null) {
            g.drawImage(bkgrndImage, 0, 0, null);
        }
        if (playerImage != null) {
            g.drawImage(playerImage, playerX, playerY, null);
        }
    }

    private class TimerListener implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            boolean moved = false;
            for (Direction direction : Direction.values()) {
                if (directionMap.get(direction)) {
                    playerX += STEP * direction.getXDirection();
                    playerY += STEP * direction.getYDirection();
                    moved = true;
                }
            }
            if (moved) {
                int x = playerX - 2 * STEP;
                int y = playerY - 2 * STEP;
                int w = playerImage.getWidth() + 4 * STEP;
                int h = playerImage.getHeight() + 4 * STEP;
                MoveIcon.this.repaint(x, y, w, h); // !! repaint just the player
            }
        }
    }

    private static void createAndShowUI() {
        JFrame frame = new JFrame("MoveIcon");
        frame.getContentPane().add(new MoveIcon());
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        java.awt.EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                createAndShowUI();
            }
        });
    }
}

The question is: with some of the swing components already designed programatically, can i open this project in netbeans and use its GUI Builder to further build on the GUI part?

md1hunox
  • 3,815
  • 10
  • 45
  • 67
  • @LuiggiMendoza sorry, was in process of editing it, did it now – md1hunox Jun 14 '12 at 04:20
  • Still, I don't get your question. You want the community tells you if you should use NetBeans to help you with your project? If it is, you should know that [Stack Overflow doesn't provide product or service recommendations](http://meta.stackexchange.com/a/128562/182862). – Luiggi Mendoza Jun 14 '12 at 04:21
  • @LuiggiMendoza No! I just wish to know, whether, anyone has previously done the GUI programatically first and then continued development on it in Netbeans GUI Builder. – md1hunox Jun 14 '12 at 04:26
  • above code is plain Java code then there no issue running that from cmd_line, Eclipse e.i. – mKorbel Jun 14 '12 at 04:51
  • yeah, all i wish to do is to use the same code in Netbeans and modify its GUI with its GUI Builder. – md1hunox Jun 14 '12 at 04:54

2 Answers2

2

No, but yes.

The problem has to do with how NetBeans does its projects and UI builder.

Netbeans puts a folder in the root of the project folder called "nbproject" which contains stuff that's unique to Netbeans that doesn't happen in Eclipse (I would explain, but it's beyond the scope of your question). You can, however, use File -> Import Project -> Eclipse Project... and it should work.

The trickier part comes with the Swing GUI. You can absolutely import the Swing code into Netbeans, but Netbeans has its own library that isn't exactly pure Swing. It's called org.jdesktop.application and it includes SingleFrameApplication, FrameView, and a few other tailor-made things. When you build an application with the Netbeans framework, it creates it preferring these classes over the "actual" Swing. Can you use the drag and drop editor? I've never tried, but I'll bet the answer is no. On the other hand, I do have one project I'm working on now that I abandoned the Netbeans Swing for the pure Swing, and if you're ok with not having the drag and drop features, it's actually kind of nice. It's way more flexible and capable because the generated code is not edit-blocked.

gobernador
  • 5,659
  • 3
  • 32
  • 51
  • To clarify: [tag:jsr296], mentioned [here](http://stackoverflow.com/a/2561540/230513), is [no longer supported](http://forums.netbeans.org/ptopic29119.html) in NetBeans, which remains otherwise completely compatible with Swing. – trashgod Jun 14 '12 at 06:11
2

What you propose is not supported, but you can add any number of new JPanel Form instances to your existing frame. SouthPanel was created by choosing File > New File > Swing GUI Forms > JPanel Form, adding a JLabel and specifying FlowLayout.

private static void createAndShowUI() {
    JFrame frame = new JFrame("MoveIcon");
    frame.add(new MoveIcon(), BorderLayout.CENTER);
    frame.add(new SouthPanel(), BorderLayout.SOUTH);
    ...
}

MoveIcon Image

trashgod
  • 203,806
  • 29
  • 246
  • 1,045