12. august 2003 - 11:34
Der er
16 kommentarer og
1 løsning
Flytte rundt på et JPanel
Heysa.
Jeg har oprettet et JPanel, som jeg bruger som baggrund. Inde i dette JPanel, skal jeg tilføje nogle andre JPanels, som hver i sær indeholdeholder noget data, et billede osv.
Disse "Under" JPanels, dem skal jeg kunne flytte rundt i det store JPanel, men det kan jeg ikke lige få til at virke.
SetLocation virker åbenbart ikke på et JPanel, selvom funktionen findes.
HJÆLP! :)
16. august 2003 - 20:45
#15
Da du lukkede spørgsmålet, besluttede jeg egentlig ikke at gøre mere ved sagen, men da jeg ikke holdt hvad jeg lovede, nemlig at vende tilbage
senere på dagen, så for du alligevel en løsning her.
Løsningen består af 2 classer, 'Stadion' og 'Field', kompiler først 'Field'
derefter 'Stadion', køres fra 'Stadion'
I bunden af classen 'Field' skal du indsætte stien til en spiller fra
hvert hold - spillerne kan flyttes med musen.
Sorry - det tog lidt tid!
public class Stadion extends javax.swing.JFrame {
public Stadion() {
initComponents();
b = new javadone.drawing.Field();
jPanel1 = new javax.swing.JPanel();
jButton1 = new javax.swing.JButton();
jButton2 = new javax.swing.JButton();
jPanel1.setLayout(new java.awt.GridLayout(15,1));
jButton1.setText("<html>Sæt hold 1<br>på banen</html>");
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
b.team1OnField();
b.repaint();
jButton1.setEnabled(false);
jButton1.setForeground(java.awt.Color.GRAY);
}
});
jPanel1.add(jButton1,0);
jPanel1.setSize(jButton1.getWidth() ,this.getHeight() - 2);
jButton2.setText("<html>Sæt hold 2<br>på banen</html>");
jButton2.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
b.team2OnField();
b.repaint();
jButton2.setEnabled(false);
jButton2.setForeground(java.awt.Color.GRAY);
}
});
jPanel1.add(jButton2,1);
getContentPane().add(jPanel1, java.awt.BorderLayout.WEST);
getContentPane().add(b);
setExtendedState(MAXIMIZED_BOTH);
show();
b.repaint();
}
private void initComponents() {
addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosing(java.awt.event.WindowEvent evt) {
exitForm(evt);
}
});
}
private void exitForm(java.awt.event.WindowEvent evt) {
System.exit(0);
}
public java.awt.Insets getInsets(){
return new java.awt.Insets(30,4,4,4);
}
public static void main(String args[]) {
new Stadion();
}
private javax.swing.JButton jButton1;
private javax.swing.JButton jButton2;
private javax.swing.JPanel jPanel1;
Field b;
}
public class Field extends javax.swing.JPanel {
public Field() {
initComponents();
}
private void initComponents() {
setLayout(null);
setBorder(new javax.swing.border.LineBorder(
new java.awt.Color(255, 255, 255), 5));
}
public void team1OnField(){
for(int i = 0;i < team1.length;i++){
team1[i] = new javax.swing.JLabel(Integer.toString(i + 1),
image,
javax.swing.JLabel.CENTER);
team1[i].setVerticalTextPosition(javax.swing.JLabel.BOTTOM);
team1[i].setHorizontalTextPosition(javax.swing.JLabel.CENTER);
team1[i].setForeground(new java.awt.Color(255, 255, 0));
team1[i].addMouseListener(new java.awt.event.MouseAdapter() {
public void mousePressed(java.awt.event.MouseEvent evt) {
first = true;
drag(evt);
}
});
team1[i].addMouseMotionListener(
new java.awt.event.MouseMotionAdapter() {
public void mouseDragged(java.awt.event.MouseEvent evt) {
drag(evt);
}
});
team1[i].setBounds(x, 10, image.getIconWidth(),
image.getIconHeight()+15 );
this.add(team1[i]);
x += image.getIconWidth();
}
x = 5;
}
public void team2OnField(){
for(int i = 0;i < team2.length;i++){
team2[i] = new javax.swing.JLabel(Integer.toString(i + 1),
image2,
javax.swing.JLabel.CENTER);
team2[i].setVerticalTextPosition(javax.swing.JLabel.BOTTOM);
team2[i].setHorizontalTextPosition(javax.swing.JLabel.CENTER);
team2[i].setForeground(new java.awt.Color(255, 255, 0));
team2[i].addMouseListener(new java.awt.event.MouseAdapter() {
public void mousePressed(java.awt.event.MouseEvent evt) {
first = true;
drag(evt);
}
});
team2[i].addMouseMotionListener(
new java.awt.event.MouseMotionAdapter() {
public void mouseDragged(java.awt.event.MouseEvent evt) {
drag(evt);
}
});
team2[i].setBounds(x1,
this.getHeight() - image2.getIconHeight() - 30,
image2.getIconWidth(),
image2.getIconHeight() + 15);
this.add(team2[i]);
x1 += image2.getIconHeight();
}
x1 = 5;
}
private void drag(java.awt.event.MouseEvent evt){
Object obj = evt.getSource();
aktivLabel = (javax.swing.JLabel)obj;
mouseP = evt.getPoint();
p = aktivLabel.getLocation();
if(first){
mfX = mouseP.getX();
mfY = mouseP.getY();
}
mX = mouseP.getX();
mY = mouseP.getY();
pX = p.getX();
pY = p.getY();
aktivLabel.setLocation((int)((pX + mX) - mfX),
(int)((pY + mY) - mfY) );
first = false;
}
public void paintComponent(java.awt.Graphics g){
if(offscreen == null) {
offscreen = (java.awt.image.BufferedImage)createImage(
this.getWidth(),
this.getHeight());
g2d = offscreen.createGraphics();
g2d.setBackground(java.awt.Color.GREEN);
}
g.drawImage(offscreen, 0, 0, this);
g.setColor(new java.awt.Color(0,153,0));
g.fillRect(0, 0, this.getWidth(), this.getHeight());
g.setColor(java.awt.Color.WHITE);
g.fillRect(0,this.getHeight()/2,this.getWidth() , 2);
g.fillOval(this.getWidth()/2 -3, this.getHeight()/2 -3, 7, 7);
g.drawOval(this.getWidth()/2 -75, this.getHeight()/2 -75,
150,150);
g.drawRect(this.getWidth()/2 -175, 0, 350, 125);
g.drawRect(this.getWidth()/2 -80, 0, 160, 50);
g.drawRect(this.getWidth()/2 -175, this.getHeight() -125,
350, this.getHeight());
g.drawRect(this.getWidth()/2 -80, this.getHeight()-50,
160, this.getHeight());
}
private java.awt.Point p, mouseP;
private javax.swing.JLabel[] team1 = new javax.swing.JLabel[11];
private javax.swing.JLabel[] team2 = new javax.swing.JLabel[11];
private int x = 5, x1 = 5;
private double pX, pY, mX, mY, mfX, mfY;
private javax.swing.JLabel aktivLabel;
private boolean first = false;
private java.awt.image.BufferedImage offscreen;
private java.awt.Graphics2D g2d;
private javax.swing.ImageIcon image2 =
new javax.swing.ImageIcon("STIEN TIL HOLD 2");
private javax.swing.ImageIcon image =
new javax.swing.ImageIcon("STIEN TIL HOLD 1");
}