Avatar billede alister_crowley Nybegynder
15. februar 2005 - 04:03 Der er 5 kommentarer og
1 løsning

Problem med JPanel (igen)

Hej

Ja, så er den gal igen.
Jeg kan altså ikke få det JPanel til at sidde ordenligt :(

Det bliver ved at at forsvinde, selvom der har fået sat en fin størrelse. Hvis jeg begynder at flytte bare lidt med det så overskriver det lige pludselig mine knapper, og jeg er ved at være total blank på hvad jeg kan gøre.

Her er koden:

/**
* @Author Claus Jørgensen
* @Date 14.02.05
* @Version 1.0.0
* @JavaVersion 1.4.3
*
* Required Files:
*
* - PaintMetoder.java
* - JavaPaint_AboutBoxPanel1.java
*
*/
package paintpack;
import java.awt.event.*;
import java.awt.*;
import javax.swing.*;
import java.awt.Dimension;
import javax.swing.JLabel;
import java.awt.BorderLayout;
import javax.swing.JPanel;
import javax.swing.JButton;
import java.awt.Rectangle;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.ScrollPane;
import java.awt.Label;
import java.awt.event.MouseListener;
import java.awt.event.MouseEvent;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.GridLayout;
import java.awt.Panel;
import java.util.*;
import javax.swing.JComboBox;
import javax.swing.BorderFactory;

public class JavaPaint extends JFrame
{

  int xPos;
  int yPos;
  int x;
  int y;
  boolean clicked = false;
  String figur = "cirkel";
  private JMenuItem menuHelpAbout = new JMenuItem();
  private JMenu menuHelp = new JMenu();
  private JMenuItem menuFileExit = new JMenuItem();
  private JMenu menuFile = new JMenu();
  private JMenuBar menuBar = new JMenuBar();
  private JButton ValgFirkant = new JButton();
  private GridLayout gridLayout1 = new GridLayout();
  private PaintMetoder metoder;
  private JButton ValgCirkel = new JButton();
  String[] colors = { "blue", "red" , "yellow", "green" };
  private JComboBox ColorChooser = new JComboBox(colors);
 

  public JavaPaint()
  {
    try
    {
      jbInit();
    }
    catch(Exception e)
    {
      e.printStackTrace();
    }
  }
 
  public static void createAndShowGUI()
  {
    JFrame JavaPaint = new JavaPaint();
    JavaPaint.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    JavaPaint.setDefaultLookAndFeelDecorated(true);
    JavaPaint.setVisible(true);
  }
 
  public static void main(String[] args)
  {
    javax.swing.SwingUtilities.invokeLater(new Runnable()
    {
      public void run()
      {
        createAndShowGUI();
      }
    });
  } 

  private void jbInit() throws Exception
  {
    this.getContentPane().setLayout(null);
    this.setSize(new Dimension(593, 435));
    this.setTitle("JavaPaint");
    this.setBackground(new Color(219, 218, 221));
    this.getContentPane().setLayout(null);

    // Knapper
    ValgFirkant.setText("Firkant");
    ValgFirkant.setBounds(new Rectangle(10, 345, 75, 25));
    ValgFirkant.addActionListener(new ActionListener()
      {
        public void actionPerformed(ActionEvent e)
        {
          ValgFirkant_actionPerformed(e);
        }
      });
    this.getContentPane().add(ColorChooser, null);
    this.getContentPane().add(ValgCirkel, null);
    this.getContentPane().add(ValgFirkant, null);

    // Menubar
    this.setJMenuBar(menuBar);
    menuFile.setText("Fil");
    menuFileExit.setText("Luk");
    menuFileExit.addActionListener(new ActionListener()
      {
        public void actionPerformed(ActionEvent ae)
        {
          fileExit_ActionPerformed(ae);
        }
      });
    menuHelp.setText("Hjælp");
    menuHelpAbout.setText("Omkring JavaPaint");
    menuHelpAbout.addActionListener(new ActionListener()
      {
        public void actionPerformed(ActionEvent ae)
        {
          helpAbout_ActionPerformed(ae);
        }
      });
    menuFile.add(menuFileExit);
    menuBar.add(menuFile);
    menuHelp.add(menuHelpAbout);
    menuBar.add(menuHelp);
   
    // Centrerer programmet på skærmen
    Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
    Dimension frameSize = this.getSize();
    this.setResizable(false);
    this.addMouseListener(new MouseAdapter()
      {
        public void mouseClicked(MouseEvent e)
        {
          this_mouseClicked(e);
        }
      });
    if (frameSize.height > screenSize.height)
    {
      frameSize.height = screenSize.height;
    }
    if (frameSize.width > screenSize.width)
    {
      frameSize.width = screenSize.width;
    }
    this.setLocation((screenSize.width - frameSize.width) / 2, (screenSize.height - frameSize.height) / 2);
    ColorChooser.addActionListener(new ActionListener()
      {
        public void actionPerformed(ActionEvent e)
        {
          ColorChooser_actionPerformed(e);
        }
      });
    ColorChooser.setBounds(new Rectangle(170, 345, 105, 25));
    this.setResizable(false);
    ValgCirkel.addActionListener(new ActionListener()
      {
        public void actionPerformed(ActionEvent e)
        {
          ValgCirkel_actionPerformed(e);
        }
      });
    ValgCirkel.setBounds(new Rectangle(90, 345, 75, 25));
    ValgCirkel.setText("Cirkel");
    metoder.setBounds(new Rectangle(0, 0, frameSize.width, 250));
    metoder.setBackground(Color.white);
    this.getContentPane().add(metoder);
  }

  void fileExit_ActionPerformed(ActionEvent e)
  {
    System.exit(0); // "Luk" menuen
  }

  void helpAbout_ActionPerformed(ActionEvent e)
  {
    // "Hjælp" menuen
    JOptionPane.showMessageDialog(this, new JavaPaint_AboutBoxPanel1(), "Omkring JavaPaint", JOptionPane.PLAIN_MESSAGE);
  }
 
  private void ValgCirkel_actionPerformed(ActionEvent e)
  {
    metoder.setFigur("CIRKEL");
  }

  private void ValgFirkant_actionPerformed(ActionEvent e)
  {
    metoder.setFigur("FIRKANT");
  }

  private void this_mouseClicked(MouseEvent e)
  {
    metoder.updateTegneArea(e.getX(),e.getY());
  }

  private void ColorChooser_actionPerformed(ActionEvent e)
  {
    JComboBox cb = (JComboBox)e.getSource();
    String ValgtFarve = (String)cb.getSelectedItem();
    if(ValgtFarve != null)
    {
      metoder.setFarve(ValgtFarve);
    }
  }

}


-------------------------------------------------------------------------------------------------------------------

/**
* PaintMetoder
* Metoder som bruges til at tegne i JavaPaint
*/
package paintpack;
import java.awt.event.*;
import java.awt.*;
import javax.swing.*;
import java.awt.Dimension;
import javax.swing.JLabel;
import java.awt.BorderLayout;
import javax.swing.JPanel;
import javax.swing.JButton;
import java.awt.Rectangle;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.ScrollPane;
import java.awt.Label;
import java.awt.event.MouseListener;
import java.awt.event.MouseEvent;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.GridLayout;
import java.awt.Panel;
import java.util.*;

public class PaintMetoder extends JPanel
{
  int xPos;
  int yPos;
  String ValgtFigur = "CIRKEL";
  String ValgtFarve = "blue";
 
  public void setFigur(String figur)
  {
    ValgtFigur = figur;
  }
 
  public void setFarve(String farve)
  {
    ValgtFarve = farve;
  }
 
  public void updateTegneArea(int getX,int getY)
  {
    xPos = getX;
    yPos = getY;
    repaint();   
  }

  public void paint(Graphics g)
  {
    super.paint(g);
    tegnFigur(ValgtFigur,ValgtFarve,g);
  }
 
  public void tegnFigur(String figur,String farve, Graphics g)
  {
    int width = 100;
    int height = 100;
    int x = xPos - width/2 + 5;
    int y = yPos - height/2 - 45;
    g.setColor(Color.decode(farve));
    g.fillRect(20,20,80,80);

    if(figur == "FIRKANT")
    {
      g.setColor(Color.decode(farve));
      g.fillRect(x,y,80,80);
    }     
    if(figur == "CIRKEL")
    {
      g.setColor(Color.decode(farve));
      g.fillOval(x,y,80,80);
    }
  }
}
Avatar billede _carsten Nybegynder
15. februar 2005 - 20:10 #1
Jeg kan ikke lige se du får initieret din klasse PaintMetoder nogen steder!

For du ikke nogle runtime fejl ??
Avatar billede _carsten Nybegynder
15. februar 2005 - 20:45 #2
Måske kan jeg ikke helt gennemskue hvor vi er på vej hen, men her er en mulig løsning


import java.awt.event.*;
import java.awt.*;
import javax.swing.*;
import java.awt.Dimension;
import javax.swing.JLabel;
import java.awt.BorderLayout;
import javax.swing.JPanel;
import javax.swing.JButton;
import javax.swing.DefaultComboBoxModel;
import java.awt.Rectangle;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.ScrollPane;
import java.awt.Label;
import java.awt.event.MouseListener;
import java.awt.event.MouseEvent;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.GridLayout;
import java.awt.Panel;
import java.util.*;
import javax.swing.JComboBox;
import javax.swing.BorderFactory;

public class JavaPaint extends JFrame
{

  int xPos;
  int yPos;
  int x;
  int y;
  boolean clicked = false;
  String figur = "cirkel";
  private JMenuItem menuHelpAbout = new JMenuItem();
  private JMenu menuHelp = new JMenu();
  private JMenuItem menuFileExit = new JMenuItem();
  private JMenu menuFile = new JMenu();
  private JMenuBar menuBar = new JMenuBar();
  private JButton ValgFirkant = new JButton();
  private GridLayout gridLayout1 = new GridLayout();
  private PaintMetoder metoder;
  private JButton ValgCirkel = new JButton();

  Object[] colors = {    new ColorObject("blue", "#0000CD"),
                          new ColorObject("red", "#FF0000"),
                          new ColorObject("yellow", "#FFFF00"),
                          new ColorObject("green", "#66CC33")};

  //String[] colors = { "blue", "red" , "yellow", "green" };
  private JComboBox ColorChooser = new JComboBox(new DefaultComboBoxModel(colors));


  public JavaPaint()
  {
    try
    {
      jbInit();
    }
    catch(Exception e)
    {
      e.printStackTrace();
    }
  }

  public static void createAndShowGUI()
  {
    JFrame JavaPaint = new JavaPaint();
    JavaPaint.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    JavaPaint.setDefaultLookAndFeelDecorated(true);
    JavaPaint.setVisible(true);
  }

  public static void main(String[] args)
  {
    javax.swing.SwingUtilities.invokeLater(new Runnable()
    {
      public void run()
      {
        createAndShowGUI();
      }
    });
  }

  private void jbInit() throws Exception
  {
    this.getContentPane().setLayout(null);
    this.setSize(new Dimension(593, 435));
    this.setTitle("JavaPaint");
    this.setBackground(new Color(219, 218, 221));
    this.getContentPane().setLayout(null);

    // Knapper
    ValgFirkant.setText("Firkant");
    ValgFirkant.setBounds(new Rectangle(10, 345, 75, 25));
    ValgFirkant.addActionListener(new ActionListener()
      {
        public void actionPerformed(ActionEvent e)
        {
          ValgFirkant_actionPerformed(e);
        }
      });
    this.getContentPane().add(ColorChooser, null);
    this.getContentPane().add(ValgCirkel, null);
    this.getContentPane().add(ValgFirkant, null);

    // Menubar
    this.setJMenuBar(menuBar);
    menuFile.setText("Fil");
    menuFileExit.setText("Luk");
    menuFileExit.addActionListener(new ActionListener()
      {
        public void actionPerformed(ActionEvent ae)
        {
          fileExit_ActionPerformed(ae);
        }
      });
    menuHelp.setText("Hjælp");
    menuHelpAbout.setText("Omkring JavaPaint");
    menuHelpAbout.addActionListener(new ActionListener()
      {
        public void actionPerformed(ActionEvent ae)
        {
          helpAbout_ActionPerformed(ae);
        }
      });
    menuFile.add(menuFileExit);
    menuBar.add(menuFile);
    menuHelp.add(menuHelpAbout);
    menuBar.add(menuHelp);

    // Centrerer programmet på skærmen
    Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
    Dimension frameSize = this.getSize();
    this.setResizable(false);
    this.addMouseListener(new MouseAdapter()
      {
        public void mouseClicked(MouseEvent e)
        {
          this_mouseClicked(e);
        }
      });
    if (frameSize.height > screenSize.height)
    {
      frameSize.height = screenSize.height;
    }
    if (frameSize.width > screenSize.width)
    {
      frameSize.width = screenSize.width;
    }
    this.setLocation((screenSize.width - frameSize.width) / 2, (screenSize.height - frameSize.height) / 2);
    ColorChooser.addActionListener(new ActionListener()
      {
        public void actionPerformed(ActionEvent e)
        {
          ColorChooser_actionPerformed(e);
        }
      });
    ColorChooser.setBounds(new Rectangle(170, 345, 105, 25));
    this.setResizable(false);
    ValgCirkel.addActionListener(new ActionListener()
      {
        public void actionPerformed(ActionEvent e)
        {
          ValgCirkel_actionPerformed(e);
        }
      });
    ValgCirkel.setBounds(new Rectangle(90, 345, 75, 25));
    ValgCirkel.setText("Cirkel");
    metoder = new PaintMetoder();
    metoder.setBounds(new Rectangle(0, 0, frameSize.width, 250));
    metoder.setBackground(Color.white);
    this.getContentPane().add(metoder, null);
  }

  void fileExit_ActionPerformed(ActionEvent e)
  {
    System.exit(0); // "Luk" menuen
  }

  void helpAbout_ActionPerformed(ActionEvent e)
  {
    // "Hjælp" menuen
    //JOptionPane.showMessageDialog(this, new JavaPaint_AboutBoxPanel1(), "Omkring JavaPaint", JOptionPane.PLAIN_MESSAGE);
  }

  private void ValgCirkel_actionPerformed(ActionEvent e)
  {
    metoder.setFigur("CIRKEL");
  }

  private void ValgFirkant_actionPerformed(ActionEvent e)
  {
    metoder.setFigur("FIRKANT");
  }

  private void this_mouseClicked(MouseEvent e)
  {
    metoder.updateTegneArea(e.getX(),e.getY());
  }

  private void ColorChooser_actionPerformed(ActionEvent e)
  {
    JComboBox cb = (JComboBox)e.getSource();
    String ValgtFarve = ((ColorObject)cb.getSelectedItem()).getHexColor();
    if(ValgtFarve != null)
    {
      metoder.setFarve(ValgtFarve);
    }
  }

}


//-------------------------------------------------------------------------------------------------------------------

/**
* PaintMetoder
* Metoder som bruges til at tegne i JavaPaint
*/


class PaintMetoder extends JPanel
{
  int xPos;
  int yPos;
  String ValgtFigur = "CIRKEL";
  String ValgtFarve = "#008800";


public PaintMetoder(){
}
  public void setFigur(String figur)
  {
    ValgtFigur = figur;
  }

  public void setFarve(String farve)
  {
    ValgtFarve = farve;
  }

  public void updateTegneArea(int getX,int getY)
  {
    xPos = getX;
    yPos = getY;
    repaint();
  }

  public void paint(Graphics g)
  {
    super.paint(g);
    tegnFigur(ValgtFigur,ValgtFarve,g);
  }

  public void tegnFigur(String figur,String farve, Graphics g) {

    int width = 100;
    int height = 100;
    int x = xPos - width/2 + 5;
    int y = yPos - height/2 - 45;
    g.setColor(Color.decode(farve));
    g.fillRect(20,20,80,80);

    if(figur == "FIRKANT")
    {
      g.setColor(Color.decode(farve));  // Du kan ikke kalde decode() med teksten
      g.fillRect(x,y,80,80);            // "blue" men med eksempelvis den hexadecimale værdi
    }                                  // for farven blå, derfor klassen
    if(figur == "CIRKEL")              // ColorObject nederst
    {
      g.setColor(Color.decode(farve));
      g.fillOval(x,y,80,80);
    }
  }
}



class ColorObject {

    private String valgtFarve = "";
    private String hexFarve = "";

    public ColorObject(String farve, String hex){
        valgtFarve = farve;
        hexFarve = hex;
    }

    public String toString(){
        return valgtFarve;
    }

    public String getHexColor(){
        return hexFarve;
    }
}
Avatar billede alister_crowley Nybegynder
16. februar 2005 - 00:04 #3
/me slaps himself.

Ja, jeg havde glemt at intiere med new().
Mht. _carsten's ColorObjekt så skull jeg faktisk til at spørge efter noget lign. :)

I kan få lov at dele teh points, mens jeg lige tester den ColorObjekt klasse.
Avatar billede _carsten Nybegynder
16. februar 2005 - 07:52 #4
Så vidt jeg kan se, er det kun mig som har kommenteret spørgsmålet, eller også er der bare koks i eksperten igen.

Nå - men her er et svar.
Avatar billede alister_crowley Nybegynder
16. februar 2005 - 13:40 #5
eller også skal jeg lære at tabbe lidt langsommere i Firefox, så jeg ikke forveksler brugernavne.

Jeg det er kun dig, sorry :D

Jeg takker mange gange.
Avatar billede alister_crowley Nybegynder
16. februar 2005 - 13:41 #6
Ja, det er kun dig.. (ikke "Jeg det er kun dig")
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester