askis Skrevet 21. september 2007 Del Skrevet 21. september 2007 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 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
aC Skrevet 21. september 2007 Del Skrevet 21. september 2007 Det er kanskje dagens værst indenterte kode Skal se på koden etter i natt Lenke til kommentar
McFly Skrevet 21. september 2007 Del Skrevet 21. september 2007 (endret) 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 21. september 2007 av McFly Lenke til kommentar
LostOblivion Skrevet 22. september 2007 Del Skrevet 22. september 2007 Hva er vitsen med this da? Lenke til kommentar
askis Skrevet 22. september 2007 Forfatter Del Skrevet 22. september 2007 Jeg bøyer meg i støvet. Tusen, tusen takk for hjelpen... :-) Lenke til kommentar
askis Skrevet 23. september 2007 Forfatter Del Skrevet 23. september 2007 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. Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå