Permalänk

Java, grafiskt..

Hej!

Gör nu mitt andra Java program grafiskt och behöver hjälp på ett ställe som jag har fastnat på.
Allt fungerar förutom att 2D figurerna ritas inte upp på panelen när man klickar på knappen RITA...

Koden:

NyRam.java

package grafik; import java.awt.*; import javax.swing.*; import java.awt.event.*; import java.awt.geom.*; public class NyRam extends JFrame implements ActionListener { private JPanel panel1 = new JPanel (); private JPanel panel2 = new JPanel (); private JPanel panel3 = new JPanel (); private JPanel panelen = new JPanel (); private JLabel etikett1 = new JLabel ("Punkt 1"); private JLabel etikett2 = new JLabel ("Punkt 2"); private JLabel etikett3 = new JLabel ("Punkt 3"); private JTextField textFalt1 = new JTextField (5); private JTextField textFalt2 = new JTextField (5); private JTextField textFalt3 = new JTextField (5); private JTextField textFalt4 = new JTextField (5); private JTextField textFalt5 = new JTextField (5); private JTextField textFalt6 = new JTextField (5); private JButton knapp = new JButton ("RITA"); private Point2D.Double punktP1; private Point2D.Double punktP2; private Point2D.Double punktP3; private NyPanel nyPan = new NyPanel (); public NyRam (String titel) { super (titel); this.setResizable (false); this.setLocationRelativeTo (null); this.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE); this.setSize (800, 600); this.setVisible (true); etikett1.setForeground (Color.WHITE); etikett2.setForeground (Color.WHITE); etikett3.setForeground (Color.WHITE); textFalt1.setBackground (Color.BLACK); textFalt1.setForeground (Color.WHITE); textFalt1.setText ("5.0"); textFalt2.setBackground (Color.BLACK); textFalt2.setForeground (Color.WHITE); textFalt2.setText ("15.0"); textFalt3.setBackground (Color.BLACK); textFalt3.setForeground (Color.WHITE); textFalt3.setText ("50.0"); textFalt4.setBackground (Color.BLACK); textFalt4.setForeground (Color.WHITE); textFalt4.setText ("100.0"); textFalt5.setBackground (Color.BLACK); textFalt5.setForeground (Color.WHITE); textFalt5.setText ("150.0"); textFalt6.setBackground (Color.BLACK); textFalt6.setForeground (Color.WHITE); textFalt6.setText ("200.0"); panel1.setLayout (new FlowLayout(FlowLayout.CENTER, 6, 2)); panel1.add (etikett1); panel1.add (textFalt1); panel1.add (textFalt2); panel1.setBackground (Color.BLACK); panel2.setLayout (new FlowLayout (FlowLayout.CENTER, 6, 2)); panel2.add (etikett2); panel2.add (textFalt3); panel2.add (textFalt4); panel2.setBackground (Color.BLACK); panel3.setLayout (new FlowLayout (FlowLayout.CENTER, 6, 2)); panel3.add (etikett3); panel3.add (textFalt5); panel3.add (textFalt6); panel3.setBackground (Color.BLACK); knapp.addActionListener (this); knapp.setBackground (Color.BLACK); knapp.setForeground (Color.WHITE); panelen.setLayout (new GridLayout (1, 1)); panelen.add (panel1); panelen.add (panel2); panelen.add (panel3); panelen.add (knapp); this.setLayout (new BorderLayout ()); this.add (panelen, "South"); this.add (nyPan, "North"); } public void actionPerformed (ActionEvent e) { try { String p1x = textFalt1.getText (); double punkt1x = Double.parseDouble (p1x); String p1y = textFalt2.getText (); double punkt1y = Double.parseDouble (p1y); String p2x = textFalt3.getText (); double punkt2x = Double.parseDouble (p2x); String p2y = textFalt4.getText (); double punkt2y = Double.parseDouble (p2y); String p3x = textFalt5.getText (); double punkt3x = Double.parseDouble (p3x); String p3y = textFalt6.getText (); double punkt3y = Double.parseDouble (p3y); punktP1 = new Point2D.Double (punkt1x, punkt1y); punktP2 = new Point2D.Double (punkt2x, punkt2y); punktP3 = new Point2D.Double (punkt3x, punkt3y); new NyPanel (punktP1, punktP2, punktP3); } catch (Exception g) { JOptionPane.showMessageDialog (null, "Du måste ange heltal eller flyttal i alla fälten!\n" + "För varje punkt så skall x samt y anges, (x, y).\n\n Felmeddelandet: " + g, "Meddelande", JOptionPane.ERROR_MESSAGE ); } } }

NyPanel.java

package grafik; import javax.swing.*; import java.awt.*; import java.awt.geom.*; public class NyPanel extends JPanel { private Point2D.Double p1 = new Point2D.Double (); private Point2D.Double p2 = new Point2D.Double (); private Point2D.Double p3 = new Point2D.Double (); public NyPanel (Point2D.Double p1, Point2D.Double p2, Point2D.Double p3) { this.p1 = p1; this.p2 = p2; this.p3 = p3; } public NyPanel () { } @Override public void paintComponent (Graphics gr) { super.paintComponent (gr); this.setBackground(Color.BLACK); this.setSize(800, 546); Graphics2D g = (Graphics2D) gr; g.setColor (Color.WHITE); QuadCurve2D kurvan = new QuadCurve2D.Double (this.p1.x, this.p1.y, this.p2.x, this.p2.y, this.p3.x, this.p3.y); Line2D.Double linjen = new Line2D.Double (this.p1, this.p3); Rectangle2D rektangeln = new Rectangle2D.Double (this.p1.x, this.p1.y, this.p3.x, p3.y); g.draw (kurvan); g.draw (linjen); g.draw (rektangeln); } }

Visa signatur

Datorn: i7 3770k, Gigabyte GA-Z77-DS3H, Corsair Vengeance 16gb, Gtx 680, Samsung 830 SSD 256gb, Seagate 1Tb, Fractal design R4, Corsair HX750 750W, DELL U2711.

Studerar: Civilingenjör IT på KTH, började HT 2009 och blir klar sommaren 2014.

Permalänk
Medlem

new NyPanel (punktP1, punktP2, punktP3);
Du lägger aldrig till den nya panelen, du skapar den bara. Tidigare, när NyRam skapas så lägger du till en sån panel, men den har inga punktdata.

Visa signatur

Kom-pa-TI-bilitet

Permalänk

Fungerar inte om jag gör så här:

nyPan = new NyPanel (punktP1, punktP2, punktP3); this.add(nyPan, "North");

Visa signatur

Datorn: i7 3770k, Gigabyte GA-Z77-DS3H, Corsair Vengeance 16gb, Gtx 680, Samsung 830 SSD 256gb, Seagate 1Tb, Fractal design R4, Corsair HX750 750W, DELL U2711.

Studerar: Civilingenjör IT på KTH, började HT 2009 och blir klar sommaren 2014.

Permalänk
Medlem

Skummade igenom snabbt o såg inget "repaint;" någonstans. Lägg till den koden i slutet på knappen "Rita" i actionevent.

Möjligt att jag missade det

Visa signatur

ATX sys i micro-atx chassi -> Ace ecco-220 | Intel Q9550 @ 3,8 w/ 620 + GT 1850 | HIS 6970-Antec 620 mod w/ GT 1850 | 4x2gb OCZ reaper 1150mhz | Corsair 750tx | m4 128gb | W7 ulti 64

Laptop Acer 3820TG | i5 450m | 5650 | Intel G3 160gb

Permalänk

Har testat nu med repaint ();, händer inget på panelen :-/

public void actionPerformed (ActionEvent e) { try { String p1x = textFalt1.getText (); double punkt1x = Double.parseDouble (p1x); String p1y = textFalt2.getText (); double punkt1y = Double.parseDouble (p1y); String p2x = textFalt3.getText (); double punkt2x = Double.parseDouble (p2x); String p2y = textFalt4.getText (); double punkt2y = Double.parseDouble (p2y); String p3x = textFalt5.getText (); double punkt3x = Double.parseDouble (p3x); String p3y = textFalt6.getText (); double punkt3y = Double.parseDouble (p3y); punktP1 = new Point2D.Double (punkt1x, punkt1y); punktP2 = new Point2D.Double (punkt2x, punkt2y); punktP3 = new Point2D.Double (punkt3x, punkt3y); nyPan = new NyPanel (punktP1, punktP2, punktP3); this.add (nyPan, "North"); nyPan.repaint (); } catch (Exception g) { JOptionPane.showMessageDialog (null, "Du måste ange heltal eller flyttal i alla fälten!\n" + "För varje punkt så skall x samt y anges, (x, y).\n\n Felmeddelandet: " + g, "Meddelande", JOptionPane.ERROR_MESSAGE ); } } }

Visa signatur

Datorn: i7 3770k, Gigabyte GA-Z77-DS3H, Corsair Vengeance 16gb, Gtx 680, Samsung 830 SSD 256gb, Seagate 1Tb, Fractal design R4, Corsair HX750 750W, DELL U2711.

Studerar: Civilingenjör IT på KTH, började HT 2009 och blir klar sommaren 2014.

Permalänk
Medlem

Till att börja med tar du aldrig bort den gamla panelen. Testa det!

Visa signatur

Kom-pa-TI-bilitet

Permalänk

Tackar!

Löste det nu.

this.getContentPane().remove(nyPan); nyPan = new NyPanel (punktP1, punktP2, punktP3); this.add (nyPan, "North"); this.getContentPane().validate(); nyPan.repaint ();

Visa signatur

Datorn: i7 3770k, Gigabyte GA-Z77-DS3H, Corsair Vengeance 16gb, Gtx 680, Samsung 830 SSD 256gb, Seagate 1Tb, Fractal design R4, Corsair HX750 750W, DELL U2711.

Studerar: Civilingenjör IT på KTH, började HT 2009 och blir klar sommaren 2014.