Hallo,
ich wollte ein Grafik in eine Internal Frame erstellen. Dadurch habe ich mit JInternalFrame gearbeitet.
Dadurch kommt das Ergebnis nicht wie ich gewollt habe.
Das InternalFrame wird angezeigt, aber der Grafik ist irgendwie steht über der InternalFrame. Also ich kann der InternalFrame weder verändern oder verschliessen.
Wenn ich die Zeile "linePanel = new LinePanel(new Point(coordinats[0], coordinats[1]), new Point(coordinats[2], coordinats[3]));" wegmachen, dann kommt die InternalFrame, wie ich gewollt habe, aber es gibt kein Funktion/Grafik, wo ich zeichnen will.
Weisst ihr, wie kann ich diese Befehl verbessern?
Soll ich ein Panel in der InternalFrame machen für die Grafik?
Hier ist die Code, die ich nach meine Meinung nicht so sicher richtig ist:
und hier ist für die Klasse LinePanel
Mein 2.Problem ist jetzt mit der Beschriftung der Koordinatensystem.
Wenn ich ein Linie von (0,0) zu (100,100) zeichne, dann kommt die Zeichnung, aber der Beschriftung der Koordinatensystem ist bei (40,25).
Kann jemand mir helfen, wo ich verändern soll?
Ich bedanke mich im voraus für jede Hilfe.
Viele Grüße,
ich wollte ein Grafik in eine Internal Frame erstellen. Dadurch habe ich mit JInternalFrame gearbeitet.
Dadurch kommt das Ergebnis nicht wie ich gewollt habe.
Das InternalFrame wird angezeigt, aber der Grafik ist irgendwie steht über der InternalFrame. Also ich kann der InternalFrame weder verändern oder verschliessen.
Wenn ich die Zeile "linePanel = new LinePanel(new Point(coordinats[0], coordinats[1]), new Point(coordinats[2], coordinats[3]));" wegmachen, dann kommt die InternalFrame, wie ich gewollt habe, aber es gibt kein Funktion/Grafik, wo ich zeichnen will.
Weisst ihr, wie kann ich diese Befehl verbessern?
Soll ich ein Panel in der InternalFrame machen für die Grafik?
Hier ist die Code, die ich nach meine Meinung nicht so sicher richtig ist:
Java:
int[] coordinats = new int[4];
coordinats[0] = (int) Double.parseDouble(inputx1.getText());
coordinats[1] = (int) Double.parseDouble(inputy1.getText());
coordinats[2] = (int) Double.parseDouble(inputx2.getText());
coordinats[3] = (int) Double.parseDouble(inputy2.getText());
JInternalFrame linePanel = new JInternalFrame("grafik", true, true, true);
linePanel = new LinePanel(new Point(coordinats[0], coordinats[1]), new Point(coordinats[2], coordinats[3]));
linePanel.setBounds(0, 0, jDesktopPane1.getWidth(), jDesktopPane1.getHeight());
jDesktopPane1.add(linePanel);
linePanel.setVisible(true);
linePanel.repaint();
und hier ist für die Klasse LinePanel
Java:
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.geom.AffineTransform;
import java.awt.print.Printable;
import javax.swing.BorderFactory;
import javax.swing.JInternalFrame;
public class LinePanel extends JInternalFrame
{
public JInternalFrame jInternalFrame1 = new JInternalFrame();
static int openFrameCount = 0;
static final int xOffset = 10, yOffset = 10;
private static final double xMin = -100;
private static final double xMax = 100;
private static final double yMin = -50;
private static final double yMax = 50;
private static final double xMinDetail = -5;
private static final double xMaxDetail = 5;
private Point startCoordinats;
private Point endCoordinats;
public LinePanel(Point startCoordinats, Point endCoordinats)
{
this.startCoordinats = startCoordinats;
this.endCoordinats = endCoordinats;
}
@Override
public void paint(Graphics g)
{
super.paint(g);
Graphics2D g2d = (Graphics2D)g;
zeicheKoordinatenSystem(g);
for(double x = xMin; x < xMax; x += 0.01 ){
g.setColor(Color.GREEN);
g.drawLine(berechneXPixel(x), berechneYPixel(f(x)), berechneXPixel(x), berechneYPixel(f(x)));
g.setColor(Color.RED);
g.drawLine(berechneDetailXPixel(x), berechneYPixel(f(x)), berechneDetailXPixel(x), berechneYPixel(f(x)));
g2d.translate(getWidth()/2.0, getHeight()/2.0); //verschieben die 0 in der Mitte
g2d.scale(1, -1); //y-Richtung nach oben
g2d.drawLine(startCoordinats.x, startCoordinats.y, endCoordinats.x, endCoordinats.y); //gerade Linie aus 2 Punkten zeichnen
}
}
private void zeicheKoordinatenSystem(Graphics g) {
zeichneXAchse(g);
zeichneYAchse(g);
}
private void zeichneXAchse(Graphics g) {
//Beschriftung der X-Achse
g.setColor(Color.BLUE);
g.drawLine(berechneXPixel(xMin),berechneYPixel(0) , berechneXPixel(xMax), berechneYPixel(0));
for(double i = xMin; i < xMax; i += (xMax - xMin) / 20)
{
g.drawLine(berechneXPixel(i),berechneYPixel(1) , berechneXPixel(i), berechneYPixel(-1));
g.drawString("" + i, berechneXPixel(i), berechneYPixel(-5));
}
int startx = berechneXPixel(xMin);
int endx = berechneXPixel(xMax);
int starty = berechneYPixel(0);
int endy = berechneYPixel(0);
g.setColor(Color.BLACK); //Farbe der Achse
g.drawLine(startx, starty, endx, endy);
}
private void zeichneYAchse(Graphics g) {
//Beschriftung der Y-Achse
g.setColor(Color.BLUE);
g.drawLine(berechneXPixel(0), berechneYPixel(yMin), berechneXPixel(0), berechneYPixel(yMax));
for(double i = yMin; i < yMax; i += (yMax - yMin) / 10)
{
g.drawLine(berechneXPixel(0.5), berechneYPixel(i), berechneXPixel(-0.5), berechneYPixel(i));
g.drawString("" + i, berechneXPixel(-10), berechneYPixel(i));
}
int startx = berechneXPixel(0);
int endx = berechneXPixel(0);
int starty = berechneYPixel(yMin);
int endy = berechneYPixel(yMax);
g.setColor(Color.BLACK); //Farbe der Achse
g.drawLine(startx, starty, endx, endy);
}
private int berechneXPixel(double x) {
double pixelBreite = ((xMax - xMin) / (double)getWidth());
return (int) ((x - xMin) / pixelBreite );
}
private int berechneDetailXPixel(double x) {
double pixelBreite = ((xMaxDetail - xMinDetail) / (double)getWidth());
return (int) ((x - xMinDetail) / pixelBreite );
}
private int berechneYPixel(double y) {
double pixelBreite = ((yMax - yMin) / (double)getHeight());
return getHeight() - ((int) ((y - yMin) / pixelBreite));
}
private double f(double x) {
return 0;
}
public LinePanel()
{
super("Grafik" +(++openFrameCount),
true, //resizeable
true, //closable
true, //maximizable
true); //iconifiable
//Set the window's location.
jInternalFrame1.setLocation(xOffset*openFrameCount, yOffset*openFrameCount);
jInternalFrame1.setPreferredSize(new Dimension(200, 100));
jInternalFrame1.setBorder(BorderFactory.createLoweredBevelBorder());
jInternalFrame1.setDefaultCloseOperation( EXIT_ON_CLOSE );
}
}
Mein 2.Problem ist jetzt mit der Beschriftung der Koordinatensystem.
Wenn ich ein Linie von (0,0) zu (100,100) zeichne, dann kommt die Zeichnung, aber der Beschriftung der Koordinatensystem ist bei (40,25).
Kann jemand mir helfen, wo ich verändern soll?
Ich bedanke mich im voraus für jede Hilfe.
Viele Grüße,
Zuletzt bearbeitet: