PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : JApplet und stehe aufm Schlauch


bulla
2007-03-26, 02:04:50
Hio,

ich wollte ein kleines JApplet proggen, habe aber ein Zugriffsproblem auf die Methoden der zweiten Klasse.
Wo erkennt ihr einen möglichen Fehler?
Konkret:
Ich will in Klasse 1

l4.setText("Sub X:");
in
l4.setText("Sub X:"+diagram.getSub().getX()+" "+diagram.getSub().getY());
ändern.

Klasse 1:


import java.awt.*;
import java.awt.event.*;

import javax.swing.*;

public class Bassator extends JApplet {
JPanel north, diagram;

JTextField tf1, tf2, tf3;

public void init() {
setSize(800, 800);
Container cp = getContentPane();
cp.setLayout(new BorderLayout());
initDisplayPanel(cp);
initNorthPanel(cp);
setVisible(true);
}

private void initNorthPanel(Container cp) {
north = new JPanel();
cp.add(north, BorderLayout.NORTH);
north.setLayout(new BoxLayout(north, BoxLayout.Y_AXIS));

tf1 = new JTextField(3);
tf2 = new JTextField(3);
tf3 = new JTextField(3);
tf1.setText("5.4");
tf2.setText("4.5");
tf3.setText("2.54");

tf1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {

}
});
tf2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
}
});
tf3.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
}
});

JLabel l1 = new JLabel();
JLabel l2 = new JLabel();
JLabel l3 = new JLabel();
JLabel l4 = new JLabel();
JLabel l5 = new JLabel();
JLabel l6 = new JLabel();
JLabel l7 = new JLabel();
JLabel l8 = new JLabel();
JLabel l9 = new JLabel();

l1.setText("Länge");
l2.setText("Breite");
l3.setText("Höhe");
l4.setText("Sub X:");
l5.setText("Höhe");
l6.setText("Höhe");
l7.setText("Höhe");
l8.setText("Höhe");
l9.setText("Höhe");

JPanel northSub1 = new JPanel();
JPanel northSub2 = new JPanel();
JPanel northSub3 = new JPanel();

northSub1.add(tf1);
northSub1.add(l1);
northSub2.add(tf2);
northSub2.add(l2);
northSub3.add(tf3);
northSub3.add(l3);

JPanel roominfo = new JPanel();
roominfo.setLayout(new BoxLayout(roominfo,BoxLayout.PAGE_AXIS));
roominfo.add(northSub1);
roominfo.add(northSub2);
roominfo.add(northSub3);

north.add(roominfo, FlowLayout.LEFT);

}

public void initDisplayPanel(Container cp) {
diagram = new Diagram(new Dimension(600,600), new Dimension(540,450));
cp.add(diagram,BorderLayout.CENTER);
diagram.setVisible(true);
}
}


Klasse 2:

import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import java.awt.geom.Point2D;

import javax.swing.*;

public class Diagram extends JPanel implements MouseMotionListener {

Dimension panelDim;

double scale;

Graphics2D g2d;

Point2D nw, ne, sw, se;

Dimension room;

Point2D listener, sub;

public Diagram(Dimension d, Dimension room) {
this.panelDim = d;
this.room = room;
calcRoom();
this.addMouseMotionListener(this);
}

public void paint(Graphics g) {
this.g2d = (Graphics2D) g;
super.paint(g2d);
g2d.drawRect(0, 0, (int) panelDim.getWidth(), (int) panelDim.getHeight());

drawRoom();
drawListener(listener);
drawSub();
}

public void calcRoom() {
int percentage = 90;
scale = 1.0;
double hgap = panelDim.getWidth() - panelDim.getWidth() * percentage / 100;
double vgap = panelDim.getHeight() - panelDim.getHeight() * percentage / 100;
nw = new Point2D.Double(hgap, vgap);
if (room.getWidth() > room.getHeight()) {
if (room.getWidth() > panelDim.getWidth() - 2 * hgap) {
scale = room.getWidth() / (panelDim.getWidth() - 2 * hgap);
}
} else {
if (room.getHeight() > panelDim.getHeight() - 2 * vgap) {
scale = room.getHeight() / (panelDim.getHeight() - 2 * vgap);
}
}
ne = new Point2D.Double(hgap + room.getWidth() / scale, vgap);
se = new Point2D.Double(hgap + room.getWidth() / scale, vgap
+ room.getHeight() / scale);
sw = new Point2D.Double(hgap, vgap + room.getHeight() / scale);

listener = new Point2D.Double(nw.getX() * 1 / 5 + ne.getX() * 4 / 5, nw
.getY()
* 0.5 + sw.getY() * 0.5);
sub = new Point2D.Double(nw.getX() * 4 / 5 + ne.getX() * 1 / 5, nw
.getY()
* 0.5 + sw.getY() * 0.5);
}

public void drawRoom() {
g2d.setColor(Color.LIGHT_GRAY);
for (int i = (int) nw.getY() + 5; i < sw.getY(); i += 5) {
g2d.drawLine((int) nw.getX(), i, (int) ne.getX(), (int) i);
}
for (int i = (int) nw.getX() + 5; i < ne.getX(); i += 5) {
g2d.drawLine((int) i, (int) nw.getY(), (int) i, (int) sw.getY());
}
g2d.setColor(Color.BLACK);

g2d.drawLine((int) nw.getX(), (int) nw.getY(), (int) ne.getX(),
(int) ne.getY());
g2d.drawLine((int) nw.getX(), (int) nw.getY(), (int) sw.getX(),
(int) sw.getY());
g2d.drawLine((int) sw.getX(), (int) sw.getY(), (int) se.getX(),
(int) se.getY());
g2d.drawLine((int) se.getX(), (int) se.getY(), (int) ne.getX(),
(int) ne.getY());

g2d.drawString("0", (int) nw.getX() - 15, (int) nw.getY() - 3);
g2d.drawString(String.valueOf(((int) ne.getX())), (int) ne.getX(),
(int) ne.getY() - 3);
g2d.drawString(String.valueOf(((int) sw.getY())), (int) sw.getX() - 20,
(int) sw.getY() + 15);
}

public void drawListener(Point2D p) {
if (p.getX() >= nw.getX() && p.getX() <= ne.getX()
&& p.getY() >= nw.getY() && p.getY() <= sw.getY()) {
g2d.drawLine((int) p.getX() - 5, (int) p.getY() - 5,
(int) p.getX() + 5, (int) p.getY() + 5);
g2d.drawLine((int) p.getX() - 5, (int) p.getY() + 5,
(int) p.getX() + 5, (int) p.getY() - 5);
}

g2d.drawString(String.valueOf(((int) listener.getY())),
(int) ne.getX() + 5, (int) listener.getY() + 5);
g2d.drawString(String.valueOf(((int) listener.getX())), (int) listener
.getX() - 10, (int) nw.getY() - 5);
g2d.drawLine((int) ne.getX(), (int) listener.getY(), (int) listener
.getX(), (int) listener.getY());
g2d.drawLine((int) listener.getX(), (int) nw.getY(), (int) listener
.getX(), (int) listener.getY());
}

public Dimension getPanelDim() {
return panelDim;
}

public void setPanelDim(Dimension panel) {
this.panelDim = panel;
}

public Dimension getRoom() {
return room;
}

public void setRoom(Dimension room) {
this.room = room;
}

public Point2D getNe() {
return ne;
}

public Point2D getNw() {
return nw;
}

public double getScale() {
return scale;
}

public Point2D getSe() {
return se;
}

public Point2D getSub() {
return sub;
}

public Point2D getSw() {
return sw;
}

public void drawSub() {
if (sub.getX() >= nw.getX() && sub.getX() <= ne.getX()
&& sub.getY() >= nw.getY() && sub.getY() <= sw.getY()) {
g2d.fillOval((int) sub.getX() - 5, (int) sub.getY() - 5, 10, 10);
}
g2d.drawString(String.valueOf(((int) sub.getY())),
(int) nw.getX() - 25, (int) sub.getY() + 5);
g2d.drawString(String.valueOf(((int) sub.getX())),
(int) sub.getX() - 10, (int) nw.getY() - 5);
g2d.drawLine((int) nw.getX(), (int) sub.getY(), (int) sub.getX(),
(int) sub.getY());
g2d.drawLine((int) sub.getX(), (int) nw.getY(), (int) sub.getX(),
(int) sub.getY());
}

public void mouseDragged(MouseEvent arg0) {
if (arg0.getX() < sub.getX() + 25 && arg0.getX() > sub.getX() - 25
&& arg0.getY() > sub.getY() - 25
&& arg0.getY() < sub.getY() + 25) {
sub.setLocation(arg0.getX(), arg0.getY());
repaint();
} else if (arg0.getX() < listener.getX() + 25
&& arg0.getX() > listener.getX() - 25
&& arg0.getY() > listener.getY() - 25
&& arg0.getY() < listener.getY() + 25) {
listener.setLocation(arg0.getX(), arg0.getY());
repaint();
}
}

public void mouseMoved(MouseEvent arg0) {
}
}

AtTheDriveIn
2007-03-26, 13:34:10
Du greifst mit diagram.getSub() auf ein Objekt der Klasse JPanel zu, aber darin ist keine Methode getSub() definert.

bulla
2007-03-26, 19:44:43
Alles klar;
eine Umdeklarierung in Diagram diagram; (statt vorher JPanel diagram; ) hat gereicht :D