Gå til innhold

problemer med et javaprogram


Anbefalte innlegg

Hei!

 

Jeg leker meg litt med et simpelt tegneprogram, men har møtt på et problem her..

Er det noen som ser hva jeg gjør feil?

Jeg er nokså nybegynner på JAVA...

Ønsket er å få f.eks JButton 'ny' til å legge ut JPanel som jeg kaller center2 (som da inneholder et nytt panel, gl1). Hvis ikke den blir trykt på, skal ikke center2 vises..

 

All hjelp mottaes med stor takk :D

 

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.GridLayout;
import java.awt.Point;
import java.awt.Polygon;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;


class Tegne extends JPanel implements MouseMotionListener,MouseListener {


int x = 0; //setter en standardverdi på global variabel for x-verdien
int y = 0;
Point a = new Point();
Point b = new Point();
Point c = new Point();
Point d = new Point();
Point e = new Point();


Polygon mp=new Polygon();



Polygon po= new Polygon();

public Tegne(){


 this.setBackground(Color.WHITE);
 this.addMouseMotionListener(this); //disse må settes til å lytte på seg selv (samme program)
 this.addMouseListener(this);



}







public void paintComponent(Graphics g)
{  super.paintComponent(g);


g.drawPolygon(mp);



}

public void mouseDragged(MouseEvent arg0) {
 // TODO Auto-generated method stub

}

public void mouseMoved(MouseEvent arg0) {
 // TODO Auto-generated method stub

}

public void mouseClicked(MouseEvent arg0) {

//  int x = arg0.getX();
//  int y = arg0.getY();
//  a.x = x;
//  b.y = y;


}

public void mouseEntered(MouseEvent arg0) {
 // TODO Auto-generated method stub

}

public void mouseExited(MouseEvent arg0) {
 // TODO Auto-generated method stub

}

public void mousePressed(MouseEvent arg0) {
 // TODO Auto-generated method stub
 mp.addPoint(arg0.getX(),arg0.getY());
 
 repaint();





}

public void mouseReleased(MouseEvent arg0) {
 // TODO Auto-generated method stub

}
}



class Vindu extends JFrame implements ActionListener 

{ 
public JPanel gl,gl1,center,center2;
private JButton ny,flytt,roter,skaler,settNyVerdi,lagre;
private JLabel jl,jl2;
private JTextField jtfX,jtfY;




//	end if
public Vindu()
{  setTitle("Tegne et polygon");
setSize(900, 700);
setLocation(350,200);
Container panel = getContentPane();

panel.setLayout(new BorderLayout());

gl = new JPanel(new GridLayout(1,4));

center = new JPanel( new FlowLayout() );
center2 = new JPanel( new FlowLayout());

getContentPane().add( center );
center.add(center2);

gl1=new JPanel(new GridLayout(5,1));

center.setBackground(Color.gray);
center.setPreferredSize(new Dimension(200, 500));
center.setMinimumSize(new Dimension(200,500));
center.setMaximumSize(new Dimension(200,500));
center.setBorder(BorderFactory.createLineBorder(java.awt.Color.gray,1));


ny = new JButton("Ny");
ny.addActionListener(this);
gl.add(ny);

flytt = new JButton("Flytt");
flytt.addActionListener(this);
gl.add(flytt);

roter = new JButton("Roter");
roter.addActionListener(this);
gl.add(roter);

skaler = new JButton("Skaler");
roter.addActionListener(this);
gl.add(skaler);

panel.add(gl,BorderLayout.NORTH);
panel.add(new Tegne(),BorderLayout.CENTER);

panel.add(center,BorderLayout.EAST);

jl = new JLabel(" Skriv inn en x-verdi:");
jl2 = new JLabel(" Skriv inn en y-verdi:");
jtfX = new JTextField();
jtfY = new JTextField();
lagre = new JButton("Lagre");
gl1.add(jl);
gl1.add(jtfX);
gl1.add(jl2);
gl1.add(jtfY);
gl1.add(lagre);

gl1.setPreferredSize(new Dimension(150,100));
gl1.setMinimumSize(new Dimension(150,100));
gl1.setMaximumSize(new Dimension(150,100));


//	center2.add(gl1);



addWindowListener(new WindowAdapter()
{  public void windowClosing(WindowEvent e)
{  System.exit(0);
}
} );



}



public void actionPerformed(ActionEvent hendelse){

 if(hendelse.getSource() == this.ny){
 	
 	
 	this.center2.add(gl1);
 	
 }	
 if(hendelse.getSource() == settNyVerdi){
 	
 	
 }
 
 if(hendelse.getSource() == roter)
 {



 }

 if(hendelse.getSource() == flytt) {


 }


 if(hendelse.getSource() == skaler) {


 }
 
}
}	


public class polygon
{  public static void main(String[] args)
{  JFrame frame = new Vindu();
frame.show();
}
}



Lenke til kommentar
Videoannonse
Annonse

Det som er galt er at du ikke gir programmet beskjed om å tegne komponentene på nytt etter at du har plassert den nye komponenten. Hvis du trykker på "Ny", og resizer vinduet, noe som kaller tilsvarende "repaint" så vil du se at det nye panelet faktisk dukker opp. Jeg har ikke helt oversikten her og nå, men det kan du løse ved å kalle setVisible(true) etter at panelet er lagt til.

 

Når jeg redigerte koden, og la til slik at det ser slik ut:

 

if(hendelse.getSource() == this.ny){

 

 

  this.center2.add(gl1);

this.setVisible(true);

 

}

 

 

Så fungerte det helt fint.

Endret av McFly
Lenke til kommentar

hvordan kan jeg typisk dele ut panelet og legge på nye knapper og input felt for hver knapp jeg trykker over.

 

Eks : Trykker 'ny' og så deles panelet gl1 ut med to tekstfelter for x g y verdi

Eks : Trykker 'roter' : tekstfelter for x og y -verdi forsvinner for så å vise et tekstfelt for input av rotasjonsgrad.

 

Finnes det med andre ord noen måte og fjerne gjeldende fremvisning når jeg trykker en ny knapp?

 

vet ikke om dette ble helt forståelig.

 

 

:D

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...