Reputation: 3955
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?
Upvotes: 2
Views: 4057
Reputation: 205785
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);
...
}
Upvotes: 2
Reputation: 5739
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.
Upvotes: 2