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); } } }
Annonceindlæg fra Academic Work Denmark A/S
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 ??
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; } }
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.
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.
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.
16. februar 2005 - 13:41
#6
Ja, det er kun dig.. (ikke "Jeg det er kun dig")
Kurser inden for grundlæggende programmering