1Danke
ERLEDIGT
NEIN
NEIN
ANTWORTEN
6
6
ZUGRIFFE
443
443
EMPFEHLEN
-
Hallo zusammen,
ich bin neu beim Programmieren und jetzt muss ich mit Java Programmiersprache beschäftigen.
Meine Aufgabe ist eine Programm einer linearen Funktion durch Eingabe von 2 Punkten in eine GUI-Interface zu schreiben.
Dazu habe ich folgende Code geschrieben:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121
import java.awt.event.*; import javax.swing.*; import java.awt.*; import java.awt.geom.AffineTransform; public class LinearApp extends JFrame implements ActionListener { JPanel graphPanel; JDesktopPane desktop; //main Panel JButton drawButton; //Draw Button JTextField Inputx1, Inputy1, Inputx2, Inputy2; //Eingabe Coordinat JLabel labelx1, labely1, labelx2, labely2, labelp1, labelp2; //Label int x1, y1, x2, y2; public LinearApp() { super("Linear Funktion"); drawButton = new JButton("Draw"); drawButton.setBounds(500, 30, 100, 40); this.getContentPane().add(drawButton); drawButton.addActionListener(this); Inputx1 = new JTextField(10); Inputx1.setBounds(100, 20, 40, 20); this.getContentPane().add(Inputx1); labelx1 = new JLabel("x1"); labelx1.setBounds(80, 20, 20, 20); add(labelx1); Inputy1 = new JTextField(10); Inputy1.setBounds(100, 60, 40, 20); this.getContentPane().add(Inputy1); labely1 = new JLabel("y1"); labely1.setBounds(80, 60, 20, 20); add(labely1); Inputx2 = new JTextField(10); Inputx2.setBounds(300, 20, 40, 20); this.getContentPane().add(Inputx2); labelx2 = new JLabel("x2"); labelx2.setBounds(280, 20, 20, 20); add(labelx2); Inputy2 = new JTextField(10); Inputy2.setBounds(300, 60, 40, 20); this.getContentPane().add(Inputy2); labely2 = new JLabel("y2"); labely2.setBounds(280, 60, 20, 20); add(labely2); labelp1 = new JLabel("P1"); labelp1.setBounds(50, 40, 20, 20); add(labelp1); labelp2 = new JLabel("P2"); labelp2.setBounds(250, 40, 20, 20); add(labelp2); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); graphPanel = new JPanel(); MyDraw oDraw = new MyDraw(); graphPanel.add(oDraw); graphPanel.setBorder(BorderFactory.createEtchedBorder()); getContentPane().add(graphPanel, BorderLayout.CENTER); getContentPane().setLayout(new BorderLayout()); this.pack(); } public void actionPerformed(ActionEvent e) { graphPanel.setVisible(true); graphPanel.add(new MyDraw()); graphPanel.validate(); graphPanel.repaint(); } public static void main(String[] args) { LinearApp lin = new LinearApp(); lin.setSize(800, 600); lin.setVisible(true); } public class MyDraw extends JPanel { public MyDraw() { this.setPreferredSize(new Dimension(320, 100)); this.setBorder(BorderFactory.createLoweredBevelBorder()); this.setVisible(true); } @Override public void paint(Graphics g) { super.paintComponent(g); Graphics2D g2d = (Graphics2D)g; AffineTransform transformer = new AffineTransform(1, 0, 0, -1, 0, getHeight()); transformer.translate(this.getWidth()/2,this.getHeight()/2); x1 = (int) Double.parseDouble(Inputx1.getText()); y1 = (int) Double.parseDouble(Inputy1.getText()); x2 = (int) Double.parseDouble(Inputx2.getText()); y2 = (int) Double.parseDouble(Inputy2.getText()); g2d.setTransform(transformer); g2d.drawLine(x1, y1, x2, y2); } } }
Durch klicken von "Draw"-Button mit einer ActionListener sollte eigentlich eine Grafik gezeichnet in eine neue Panel, wo in der untere Frame Panel liegt.
Aber ich kann diese Grafik nicht zeichnen.
Weisst ihr wo ich falsch gemacht habe?
Für jede Hilfe bin ich sehr dankbar.
Liebe Grüße
-
12.04.10 15:38 #2
Sorry, ich konnte mir das einfach nicht ansehen ohne etwas zu unternehmen.
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169
import javax.swing.BorderFactory; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTextField; /** * Vorsicht, Baustelle * Eltern haften für ihre Kinder */ public class LinearApp { private static final long serialVersionUID = 1L; public LinearApp() { super(); JFrame frame = new JFrame(); frame.setTitle("Linear Funktion"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(800, 600); JPanel inputPanel = new JPanel(null); inputPanel.setBounds(0, 0, frame.getWidth(), frame.getHeight()); frame.add(inputPanel); JPanel graphPanel = new JPanel(); graphPanel.setBorder(BorderFactory.createEtchedBorder()); frame.add(graphPanel); JLabel labelx1 = new JLabel("x1"); labelx1.setBounds(80, 20, 20, 20); inputPanel.add(labelx1); JLabel labely1 = new JLabel("y1"); labely1.setBounds(80, 60, 20, 20); inputPanel.add(labely1); JLabel labelx2 = new JLabel("x2"); labelx2.setBounds(280, 20, 20, 20); inputPanel.add(labelx2); JLabel labely2 = new JLabel("y2"); labely2.setBounds(280, 60, 20, 20); inputPanel.add(labely2); JLabel labelp1 = new JLabel("P1"); labelp1.setBounds(50, 40, 20, 20); inputPanel.add(labelp1); JLabel labelp2 = new JLabel("P2"); labelp2.setBounds(250, 40, 20, 20); inputPanel.add(labelp2); JTextField inputX1 = new JTextField(); inputX1.setBounds(100, 20, 40, 20); inputPanel.add(inputX1); JTextField inputY1 = new JTextField("lol"); inputY1.setBounds(100, 60, 40, 20); inputPanel.add(inputY1); JTextField inputX2 = new JTextField(); inputX2.setBounds(300, 20, 40, 20); inputPanel.add(inputX2); JTextField inputY2 = new JTextField(); inputY2.setBounds(300, 60, 40, 20); inputPanel.add(inputY2); JButton drawButton = new DrawButton(inputX1, inputY1, inputX2, inputY2, frame); drawButton.setText("Draw"); drawButton.setBounds(500, 30, 100, 40); inputPanel.add(drawButton); frame.setVisible(true); } public static void main(String[] args) { new LinearApp(); } } import java.awt.Point; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JTextField; class DrawButton extends JButton implements ActionListener { private static final long serialVersionUID = 1L; private JTextField inputX1; private JTextField inputY1; private JTextField inputX2; private JTextField inputY2; private JFrame frame; DrawButton(JTextField inputX1, JTextField inputX2, JTextField inputY1, JTextField inputY2, JFrame frame) { super(); addActionListener(this); this.inputX1 = inputX1; this.inputY1 = inputY1; this.inputX2 = inputX2; this.inputY2 = inputY2; this.frame = frame; } public void actionPerformed(ActionEvent e) { try { int[] coordinats = new int[4]; coordinats[0] = Integer.parseInt(inputX1.getText()); coordinats[1] = Integer.parseInt(inputY1.getText()); coordinats[2] = Integer.parseInt(inputX2.getText()); coordinats[3] = Integer.parseInt(inputY2.getText()); JPanel linePanel = new LinePanel(new Point(coordinats[0], coordinats[1]), new Point(coordinats[2], coordinats[3])); linePanel.setBounds(0, 0, frame.getWidth(), frame.getHeight()); frame.add(linePanel, 0); frame.repaint(); } catch (NumberFormatException e1) { JOptionPane.showMessageDialog(null, "Wrong Input", "", JOptionPane.WARNING_MESSAGE); } } } import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Point; import javax.swing.BorderFactory; import javax.swing.JPanel; class LinePanel extends JPanel { private static final long serialVersionUID = 1L; private Point startCoordinats; private Point endCoordinats; LinePanel(Point startCoordinats, Point endCoordinats) { setPreferredSize(new Dimension(320, 100)); setBorder(BorderFactory.createLoweredBevelBorder()); this.startCoordinats = startCoordinats; this.endCoordinats = endCoordinats; } public void paint(Graphics g) { super.paint(g); g.setColor(Color.RED); g.drawLine(startCoordinats.x, startCoordinats.y, endCoordinats.x, endCoordinats.y); } }
Mein kleiner webstart Projektplaner:
http://178.77.101.236/ppws/
Ideen, Verbesserungsvorschläge, Bugsmeldungen und allg. Kritik erwünscht und erbeten.
Danke. :)
-
12.04.10 16:13 #3
Hallo,
ist es wirklich sinnvoll, bei jedem Button-Klick eine neue Instanz des Panels zu erzeugen und dem Frame hinzuzufügen? Allein aus Performancegründen würde ich lieber eine einzige Instanz des Panels verwenden und sie mit Setter-Methoden für die neuen Koordinaten versehen. Anschließend müsste man in der paint() Methode noch g.clearRect() aufrufen, damit die alten Linien verschwinden.
Grüße
Vincent"Any sufficiently advanced technology is indistinguishable from magic." Arthur C. Clarke.
-
Erstmal danke für die Antwort.
Jetzt habe ich Probleme beim Zeichen der Koordinatensystem.
Habt ihr Idee, oder habe ihr vielleicht ein Link, wo ich solche Kartesische Koordinatensystem als Referat nachschauen kann?
Danke im voraus für jede Hilfe
Liebe Grüße,Geändert von koddy013 (13.04.10 um 12:13 Uhr)
-
mit dem Koordinatensystem ist es erledigt.
Jetzt muss ich den Grafik oder den Zeichnung in eine neue Frame (InternalFrame) beibringen.
Ich habe den Code nachgerustet mit JInternalFrame und JDesktopPane, aber als ich den DrawButton klicke, passiert ja nichts.
Könnt ihr mir helfen?
Ich bedanke mich im voraus für jede Hilfe.
Liebe Grüße,
-
13.04.10 16:13 #6
Und wo ist dieser besagte Code?
Mein kleiner webstart Projektplaner:
http://178.77.101.236/ppws/
Ideen, Verbesserungsvorschläge, Bugsmeldungen und allg. Kritik erwünscht und erbeten.
Danke. :)
-
Folgende ist das GUI Code:
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.GridBagLayout; import javax.swing.*; public class LineareFunktion { public LineareFunktion() { super(); final JFrame frame = new JFrame(); frame.setTitle("Linear Funktion"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(1024, 768); frame.setVisible(true); frame.setResizable(false); //kein Resize möglich JPanel inputPanel = new JPanel(null); inputPanel.setBounds(0, 0, frame.getWidth(), frame.getHeight()); inputPanel.setBorder(BorderFactory.createTitledBorder("Linear aus 2 Punkten")); frame.add(inputPanel); JLabel labelx1 = new JLabel("x1"); labelx1.setBounds(80, 20, 20, 20); inputPanel.add(labelx1); JLabel labely1 = new JLabel("y1"); labely1.setBounds(80, 60, 20, 20); inputPanel.add(labely1); JLabel labelx2 = new JLabel("x2"); labelx2.setBounds(280, 20, 20, 20); inputPanel.add(labelx2); JLabel labely2 = new JLabel("y2"); labely2.setBounds(280, 60, 20, 20); inputPanel.add(labely2); JLabel labelp1 = new JLabel("P1"); labelp1.setBounds(50, 40, 20, 20); inputPanel.add(labelp1); JLabel labelp2 = new JLabel("P2"); labelp2.setBounds(250, 40, 20, 20); inputPanel.add(labelp2); JTextField inputX1 = new JTextField(); inputX1.setBounds(100, 20, 40, 20); inputPanel.add(inputX1); JTextField inputY1 = new JTextField(); inputY1.setBounds(100, 60, 40, 20); inputPanel.add(inputY1); JTextField inputX2 = new JTextField(); inputX2.setBounds(300, 20, 40, 20); inputPanel.add(inputX2); JTextField inputY2 = new JTextField(); inputY2.setBounds(300, 60, 40, 20); inputPanel.add(inputY2); JDesktopPane graphPanel = new JDesktopPane(); //a specialized layered pane graphPanel.setBorder(BorderFactory.createTitledBorder("Grafik")); graphPanel.setOpaque(true); graphPanel.setBounds(0, 100, inputPanel.getWidth(), inputPanel.getHeight()); inputPanel.add(graphPanel, BorderLayout.CENTER); //Make dragging faster: graphPanel.putClientProperty("JDesktopPane.dragMode", "outline"); JInternalFrame internalframe = new JInternalFrame(); internalframe.setBounds(0, 0, graphPanel.getWidth(), graphPanel.getHeight()); graphPanel.add(internalframe); JButton drawButton = new DrawButton(inputX1, inputY1, inputX2, inputY2, internalframe); drawButton.setText("Draw"); drawButton.setBounds(500, 30, 100, 40); inputPanel.add(drawButton); JButton printButton = new JButton(); printButton.setText("Print"); printButton.setBounds(600, 30, 100, 40); inputPanel.add(printButton); } public static void main(String[] args) { new LineareFunktion(); } }
und dann hier ist die Code von Klasse LinePanel
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
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 javax.swing.BorderFactory; import javax.swing.JInternalFrame; public class LinePanel extends JInternalFrame { static int openFrameCount = 0; static final int xOffset = 30, yOffset = 30; Color background = new Color(250,220,150); Graphics ksys1; int g = 10; int k = 50; private Point startCoordinats; private Point endCoordinats; public LinePanel(Point startCoordinats, Point endCoordinats) { super("Grafik" +(++openFrameCount), true, //resizeable true, //closable true, //maximizable true); //iconifiable this.startCoordinats = startCoordinats; this.endCoordinats = endCoordinats; //Set the window's location. setLocation(xOffset*openFrameCount, yOffset*openFrameCount); setPreferredSize(new Dimension(300, 300)); setBorder(BorderFactory.createLoweredBevelBorder()); setDefaultCloseOperation( EXIT_ON_CLOSE ); setVisible(true); pack(); } @Override public void paint(Graphics g) { super.paint(g); Graphics2D g2d = (Graphics2D)g; AffineTransform transformer = new AffineTransform(1, 0, 0, -1, 0, getHeight()); //transformieren x-y-Richtung transformer.translate(this.getWidth()/2,this.getHeight()/2); //verschieben die 0 in der Mitte g2d.setTransform(transformer); g.setColor(Color.RED); // Farbe der Linie ksys1=g.create(0, 0, 400, 400); // Erzeugen der Graphik-Objekte ksys1.setClip(-200, -200, 400, 400); // Die Ränder setzten ksys1.setColor(Color.lightGray); // Die Zeichenfarbe setzten ksys1.fillRect(-200, -200, 400, 400); // Den Hintergrund zeichnen zeichne_ksystem(ksys1); // Das Koordinatensystem zeichnen g.drawLine(startCoordinats.x, startCoordinats.y, endCoordinats.x, endCoordinats.y); //gerade Linie aus 2 Punkten zeichnen } private void zeichne_ksystem(Graphics ks) { ks.setColor(Color.black); ks.drawLine(-200, 0, 200, 0); // x-Achse ks.drawLine(0,-200, 0, 200); // y-Achse for(int j=0, k=0;Math.abs(j)<200;j+=g,k-=g) // Unterteilungen for(int i=0, m=0;Math.abs(i)<200;i+=g,m-=g){ ks.drawLine(i, j, i, j); ks.drawLine(k, m, k, m); ks.drawLine(i, k, i, k); ks.drawLine(m, j, m, j); } ks.drawString("(0,0)", 2, -5); } }
Und hier ist von andere Klasse
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
import java.awt.Point; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JDesktopPane; import javax.swing.JInternalFrame; import javax.swing.JOptionPane; import javax.swing.JTextField; class DrawButton extends JButton implements ActionListener { private JTextField inputX1; private JTextField inputY1; private JTextField inputX2; private JTextField inputY2; private JInternalFrame internalframe; private JDesktopPane graphPanel; public DrawButton(JTextField inputX1, JTextField inputY1, JTextField inputX2, JTextField inputY2, JInternalFrame internalframe) { super(); addActionListener(this); this.inputX1 = inputX1; this.inputY1 = inputY1; this.inputX2 = inputX2; this.inputY2 = inputY2; this.internalframe = internalframe; } public void actionPerformed(ActionEvent e) { try { 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()); LinePanel internalframe = new LinePanel(new Point(coordinats[0], coordinats[1]), new Point(coordinats[2], coordinats[3])); internalframe.setBounds(0, 0, graphPanel.getWidth(), graphPanel.getHeight()); graphPanel.add(internalframe); internalframe.setVisible(true); internalframe.repaint(); } catch (NumberFormatException e1) { JOptionPane.showMessageDialog(null, "Wrong Input", "", JOptionPane.WARNING_MESSAGE); } } }
Die GUI ist ja i.O.
Die DesktopPanel ist ja auch da. Aber die InternalFrame wird nicht gezeigt ;(Geändert von koddy013 (15.04.10 um 15:54 Uhr)
Ähnliche Themen
-
update durch klicken einer grafik
Von Godstyle im Forum Javascript & AjaxAntworten: 1Letzter Beitrag: 09.08.10, 14:06 -
Variable durch Grafik ersetzen
Von trc120 im Forum PHPAntworten: 17Letzter Beitrag: 09.06.09, 00:06 -
JButton durch Grafik ersetzen
Von mikedef im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 3Letzter Beitrag: 05.05.06, 22:44 -
bordercolor durch Grafik ersetzen
Von gso im Forum HTML & XHTMLAntworten: 4Letzter Beitrag: 30.09.04, 02:04 -
Durch klick Grafik erscheinen lassen
Von Michael Och im Forum Flash PlattformAntworten: 7Letzter Beitrag: 17.10.03, 17:55





Zitieren
Login





