setBounds voor een g.DrawString

Status
Niet open voor verdere reacties.

Royy212

Gebruiker
Lid geworden
19 jan 2011
Berichten
183
Hey, voordat ik mijn vraag stel, ik heb vrijwel geen ervaring met Java, ik ben het nu aan het leren vanuit een boek.
In het boek word er een voorbeeld gegeven, maar ik wil er graag iets aan veranderen.

Dan nu mijn vraag: Hoe kan ik in het voorbeeld hieronder, de plaats van paintComponent zetten.
Op dit moment kan ik mijn JLabels etc een mooie plaats geven ( heb ik nog niet gedaan) maar ik wil de uitvoer van paintComponent kunnen veranderen, kan iemand mij hierbij helpen?

Mainclass:
Code:
import javax.swing.*;
import javax.swing.border.*;
import java.awt.*;
import java.awt.event.*;

 
 
 
public class Vb0201 extends JFrame {
    
    public static void main(String[] args) {
	
	JFrame frame = new Vb0201();
	frame.setSize(600, 600);
	frame.setLocationRelativeTo(null);
	frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	frame.setTitle("Test");
	JPanel paneel = new Paneel();
	frame.setContentPane (paneel);
	frame.setVisible(true);
    }
    

		
}

De class waar het volgens mij om gaat:
Code:
import javax.swing.*;
import javax.swing.border.*;
import java.awt.*;
import java.awt.event.*;


	class Paneel extends JPanel{
		private JTextField inlegVak, renteVak;
		private JButton knop;
		private double inleg, renteFactor;
		private int jaar;
		private JLabel inlegLabel, renteLabel;
		
		public Paneel() {
			
			//BELANGRIJK SET LAYOUT NULL
			setLayout(null);
			inlegVak = new JTextField (10);
			inlegLabel = new JLabel ("Inleg");
			renteVak = new JTextField (10);
			renteLabel = new JLabel ("Rentepercentage");
			knop = new JButton ("Bereken");
			knop.addActionListener(new KnopHandler());
			
			inlegLabel.setBounds (30,40,90,20);
			inlegVak.setBounds (110,40,90,20);
			
			renteLabel.setBounds (30,90,90,20);
			renteVak.setBounds (110,90,90,20);
			
			
			
			add (inlegLabel);
			add (inlegVak);
			add (renteLabel);
			add (renteVak);
			add (knop);
		}
		
		
		
		public void paintComponent (Graphics g) {
			super.paintComponent (g);
			g.setFont (new Font ("Courier", Font.BOLD, 14));
			
			double bedrag = inleg;
			jaar = 2007;
			int y = 50;
			g.drawString ("Rentefactor: " + renteFactor, 80, y);
			y += 15;
			
			while (bedrag < 2 * inleg ) {
				g.drawString (
					String.format ("%5d:%10.2f", jaar, bedrag), 80, y +=15);
				jaar ++;
				bedrag *= renteFactor;
			}
		}
		
		class KnopHandler implements ActionListener {
			public void actionPerformed (ActionEvent e) {
				String invoer1 = inlegVak.getText();
				inleg = Double.parseDouble (invoer1);
				
				String invoer2 = renteVak.getText ();
				renteFactor = 1 + Double.parseDouble (invoer2) / 100;
				repaint();
			}
		}
}
 
Laatst bewerkt:
Ik snap niet helemaal wat je bedoeld met 'de plaats zetten in paint component'. Paint component wordt vaak gebruikt om zaken op het scherm te tekenen (tekst, lijntjes bijvoorbeeld), niet posities te bepalen. De posities van jouw labels zet jij door middel van de setBounds methode van een JLabel (deze waardes kan je aanpassen om de knoppen te verplaatsen). In je code zet je de layout op null, dit betekent dat je geen bepaalde layout wilt, maar zelf de componenten wilt plaatsen (absoluut).
Zelf gebruik ik altijd layouts en waag ik mij niet aan absolute posities (vervelend bij verschillende schermgroottes). Dit zal ik jou dan ook aanraden. Je kan er bijvoorbeeld voor kiezen om een horizontale layout (FlowLayout) te kiezen. Als je deze layout zet worden alle componenten die jij aan het paneel toevoegt, horizontaal naast elkaar gezet. De verschillende layouts kan je hier vinden: http://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html

Het is al een tijdje terug dat ik iets met swing heb gedaan, maar ik zal proberen iets zinnigs te coderen.
Code:
public class MijnPaneel {
    
     public MijnPaneel() { //constructor, wordt aangeroepen bij de creatie van een object van deze klasse (de klasse zie ik altijd als een blauwdruk)
            setLayout(new FlowLayout());
            //nu worden al onze labels naast elkaar getoond.
            add(new JLabel("1"));
           add(new JLabel("2"));
           add(new JLabel("3"));
           add(new JLabel("4"));
           add(new JLabel("5"));
    }
}
 
Hey bedankt voor de reactie, ik zie dat ik niet helemaal duidelijk was geweest, ik wil zeg maar de uitvoer van PaintComponent een plaats geven, is er een manier hoe ik de uitvoer d.m.v. coördinaten kan plaatsen?
 

Hey bedankt voor uw reactie, ik heb een paar minuten hierna gekeken en ik snap er niet echt veel van.
Ik ben niet lang geleden begonnen met een boek om Java te leren.

Maar ik denk dat ik hier op moet letten:
Code:
g2d.drawString(s, (level.Xsize - metr.stringWidth(s)) / 2, level.Ysize / 2 -height);
 
        g2d.drawString(s2, (level.Xsize - metr.stringWidth(s2)) / 2, level.Ysize / 2);
Dat neem ik teminste aan, ik weet niet echt wat ik verder hiermee moet?
Want ik wil zeg maar een string zonder behulp van een Layout, een plaats geven d.m.v. een x en y coördinaat.

Extra vraagje: Bestaat een string altijd uit tekst, want ik zie hierboven in het voorbeeld volgens mij iets anders?

Alvast bedankt,
Roy
 
Laatst bewerkt:
Een string bestaat uit tekst, maar je kan ook een nummer in een tekst verwerken.

Bijvoorbeeld op de volgende manier:
Code:
String mijnString = "dit is tekst " + 1 + " tussen dit gedeelte en het vorige gedeelte komt de integer 1 (integer is een heel getal) te staan.";
Hetzelfde geldt voor floats en doubles (decimalen).

In jouw voorgaande post worden de variabelen s en s2 op een bepaalde positie gezet. De volgende methode wordt aangeroepen: http://docs.oracle.com/javase/7/doc...ml#drawString(java.lang.String, float, float). Zoals je kunt lezen verwacht deze methode drie argumenten: argument 1 is de string die getoond moet worden, argument twee en drie zijn de x en y coordinaat van het canvas.

Over tekst op het scherm tonen, daar kun je inderdaad de drawString voor gebruiken. Bekijk de java api voor meer methodes van de Graphics2D klasse. http://docs.oracle.com/javase/7/docs/api/java/awt/Graphics2D.html

Ik kan je aanraden om de java api te bekijken als je een methode niet snapt. Vergeet niet dat je onder water gewoon een klasse aanroept en/of methodes. Graphics2D is namelijk gewoon een klasse met verschillende methodes die jij toevallig gebruikt in jouw klasses.
 
Laatst bewerkt:
Een string bestaat uit tekst, maar je kan ook een nummer in een tekst verwerken.

Bijvoorbeeld op de volgende manier:
Code:
String mijnString = "dit is tekst " + 1 + " tussen dit gedeelte en het vorige gedeelte komt de integer 1 (integer is een heel getal) te staan.";
Hetzelfde geldt voor floats en doubles (decimalen).

In jouw voorgaande post worden de variabelen s en s2 op een bepaalde positie gezet. De volgende methode wordt aangeroepen: http://docs.oracle.com/javase/7/doc...ml#drawString(java.lang.String, float, float). Zoals je kunt lezen verwacht deze methode drie argumenten: argument 1 is de string die getoond moet worden, argument twee en drie zijn de x en y coordinaat van het canvas.

Over tekst op het scherm tonen, daar kun je inderdaad de drawString voor gebruiken. Bekijk de java api voor meer methodes van de Graphics2D klasse. http://docs.oracle.com/javase/7/docs/api/java/awt/Graphics2D.html

Ik kan je aanraden om de java api te bekijken als je een methode niet snapt. Vergeet niet dat je onder water gewoon een klasse aanroept en/of methodes. Graphics2D is namelijk gewoon een klasse met verschillende methodes die jij toevallig gebruikt in jouw klasses.

Ow ja ik zie het al, ik snapte het eerst niet helemaal, maar ik zie dat ik de String als een positie gaf.
Onwijs bedankt voor je hulp :)!
 
Hey bedankt voor uw reactie, ik heb een paar minuten hierna gekeken en ik snap er niet echt veel van.
Ik ben niet lang geleden begonnen met een boek om Java te leren.

Maar ik denk dat ik hier op moet letten:
Code:
g2d.drawString(s, (level.Xsize - metr.stringWidth(s)) / 2, level.Ysize / 2 -height);
 
        g2d.drawString(s2, (level.Xsize - metr.stringWidth(s2)) / 2, level.Ysize / 2);
Dat neem ik teminste aan, ik weet niet echt wat ik verder hiermee moet?
Want ik wil zeg maar een string zonder behulp van een Layout, een plaats geven d.m.v. een x en y coördinaat.

Extra vraagje: Bestaat een string altijd uit tekst, want ik zie hierboven in het voorbeeld volgens mij iets anders?

Alvast bedankt,
Roy

String s = "UNDER CONSTRUCTION, please kill the process by 'ctrl+alt+del'if it stop working /n";
String s2 = "Press 's' to start.";
nu simpel om dat er op te zetten nu let wel op het game maakt één fout bij het aftrekken zal hij op - outofboundexception van de int maar ja die zal je wel tegenkomen als je het zou willen runnen je mag het er altijd uithalen maar het weet het alvast

let op berekening is om het in het midden te plaatsen ook als de lengte van één sector vergroot of verkleind
maar het belangerijkste is
repaint wordt automatisch aangeroepen en roept op zich paint aan een magisch functie binnen java maar weinig gekende
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan