Witam wszystkich
Piszę aplikacje mającą umożliwiać projektowanie prostej struktury sieci komputerowej. Program ma:
-dodawać kolejne obrazki do panela
-umożliwiać ich dowolne rozmieszczenie na panelu za pomocą myszki
Natrafiłem na problem w momencie dodawania wielu obrazków do panela, zamiast dodawać kolejne, zamieniam jeden na drugi. Domyślam się ze muszę jakoś zmodyfikować klasę paint, ale nie mam pomysłu jak.
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionAdapter;
import java.awt.event.MouseMotionListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.net.URL;
import javax.imageio.ImageIO;
import javax.swing.AbstractAction;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.JToolBar;
import javax.swing.SwingUtilities;
public class LoadImg extends JPanel implements ActionListener
//,MouseListener, MouseMotionListener
{
BufferedImage img, ru;
String name;
int x, y, i;
static final private String RUTER = "ruter";
static final private String HOST = "host";
static final private String SWITCH = "switch";
static final private String ACCESS_POINT = "access_point";
static final private String WAN = "wan";
// static final private String DRUKARKA = "drukarka";
// static final private String IP_TEL = "ip_tel";
// static final private String SERWER = "serwer";
// static final private String RJ45 = "rj45";
// static final private String WIFI = "wifi";
// static final private String SWIATLOWOD = "swiatlowod";
// static final private String KOMENTARZ = "komentarz";
LoadImg(){
setBackground(Color.WHITE);
addMouseMotionListener(new MouseMotionHandler());
//int last_x, last_y;
// boolean firstTime = true;
// boolean pressOut = false;
// addMouseMotionListener(this);
// addMouseListener(this);
}
class MouseMotionHandler extends MouseMotionAdapter {
public void mouseDragged(MouseEvent e) {
x = e.getX();
y = e.getY();
repaint();
}
}
public void paint(Graphics g) {
super.paint(g);
g.drawImage(img, x, y, null);
}
public Dimension getPreferredSize() {
if (img == null) {
return new Dimension(100,100);
} else {
return new Dimension(img.getWidth(null), img.getHeight(null));
}
}
public void LoadImageApp(String name){
if (name != null )
i++;
// System.out.println(i);
try {
img = ImageIO.read(new File("pic/obiekty/"+name+".gif"));
} catch (IOException e) {
}
System.out.println("wczytano: "+name+ i);
}
public void createToolbar(){
JToolBar toolBar = new JToolBar();
addButtons(toolBar);
toolBar.setFloatable(true);
toolBar.setRollover(true);
add(toolBar, BorderLayout.NORTH);
}
void addButtons(JToolBar toolBar){
JButton button = null;
button = makeNavigationButton("truter", RUTER,
"Dodaj ruter",
"Ruter");
toolBar.add(button);
button = makeNavigationButton("tswitch", SWITCH,
"Dodaj switch",
"Switch");
toolBar.add(button);
button = makeNavigationButton("tacpo", ACCESS_POINT,
"Dodaj access point-a",
"Access Point");
toolBar.add(button);
button = makeNavigationButton("tisp", WAN,
"Dodaj polączenie WAN",
"Switch");
toolBar.add(button);
button = makeNavigationButton("thost", HOST,
"Dodaj host-a",
"Host");
toolBar.add(button);
}
protected JButton makeNavigationButton(String imageName,
String actionCommand,
String toolTipText,
String altText) {
//wyszukiwanie obrzkow
String imgLocation = "pic/pasek/"+imageName+".gif";
URL imageURL = LoadImg.class.getResource(imgLocation);
//tworzenie i inicjalizacja przyciskow
JButton button = new JButton();
button.setActionCommand(actionCommand);
button.setToolTipText(toolTipText);
button.addActionListener(this);
if (imageURL != null) { //obrazek znaleziony
button.setIcon(new ImageIcon(imageURL, altText));
} else { //obrazek nie znaleziony
button.setText(altText);
System.err.println("Nie znalezniono obrazka: "
+ imgLocation);
}
return button;
}
public void actionPerformed(ActionEvent e) {
String cmd = e.getActionCommand();
String description = null;
// obsluga paska
if (RUTER.equals(cmd)) { //pierwszy akcja
description = "ruter";
// LoadRuter();
} else if (HOST.equals(cmd)) { //drugi akcja
description = "host";
}
name = description;
LoadImageApp(name);
repaint();
}
public static void createShowGUI(){
JFrame f = new JFrame("Wyswietlanie");
LoadImg lImg = new LoadImg();
lImg.createToolbar();
f.setDefaultCloseOperation(3);
f.setLayout(new BorderLayout());
f.setSize(400,300);
//f.setLayout(new FlowLayout());
f.setVisible(true);
lImg.setOpaque(true);
f.setContentPane(lImg);
}
public static void main(String[] args){
SwingUtilities.invokeLater(new Runnable(){
public void run(){
createShowGUI();
}
});
}
}