tl
Nybegynder
16. januar 2004 - 11:32
Der er
10 kommentarer
Grafik i Java og Swing
Hvordan blander man Grafik og Swing componenter i Java. Graphics objektet er jo ikke en component, man kan tilføje til et Panel eller Pane, så hvordan går man det hvis man gerne vil have et panel med grafik og et med Swing componenter i samme frame?
Annonceindlæg fra Infor
16. januar 2004 - 11:42
#1
ethvert swing komponent har en graphics, som du kan tegne på. Hvad er det mere præcist du vil?
tl
Nybegynder
16. januar 2004 - 11:44
#2
ok.. så jeg kan tage et JPanel og tegne grafik direkte derpå?
16. januar 2004 - 12:17
#3
Ja - det kan du, prøv nedenstående eksempel, tegner streger med musen public class JFrame extends javax.swing.JFrame { public JFrame() { initComponents(); } private void initComponents() { panel = new javax.swing.JPanel(); addWindowListener(new java.awt.event.WindowAdapter() { public void windowClosing(java.awt.event.WindowEvent evt) { exitForm(evt); } }); panel.addMouseListener(new java.awt.event.MouseAdapter() { public void mousePressed(java.awt.event.MouseEvent evt) { tegn(evt); } }); panel.addMouseMotionListener(new java.awt.event.MouseMotionAdapter() { public void mouseDragged(java.awt.event.MouseEvent evt) { drag(evt); } }); getContentPane().add(panel, java.awt.BorderLayout.CENTER); pack(); } private void drag(java.awt.event.MouseEvent evt) { int q = evt.getX(); int w = evt.getY(); g2.drawLine(x , y, q, w); } private void tegn(java.awt.event.MouseEvent evt) { g = panel.getGraphics(); g2 = (java.awt.Graphics2D)g; x = evt.getX(); y = evt.getY(); } private void exitForm(java.awt.event.WindowEvent evt) { System.exit(0); } public static void main(String args[]) { new JFrame().show(); } private javax.swing.JPanel panel; private java.awt.Graphics g; private java.awt.Graphics2D g2; private int x, y; }
tl
Nybegynder
16. januar 2004 - 12:55
#4
Ok tak... Jeg har lavet en modification - som nu ikke virker.. man skulle kunne tegne en kasse man kan flytte rundt med. kan du gennemskue hvorfor. import java.awt.*; import java.awt.event.*; import java.awt.image.*; import javax.swing.*; public class JFrame extends javax.swing.JFrame { Rectangle rect; public JFrame() { initComponents(); } private void initComponents() { panel = new javax.swing.JPanel(); addWindowListener(new java.awt.event.WindowAdapter() { public void windowClosing(java.awt.event.WindowEvent evt) { exitForm(evt); } }); panel.addMouseListener(new java.awt.event.MouseAdapter() { public void mousePressed(java.awt.event.MouseEvent evt) { tegn(evt); } }); panel.addMouseMotionListener(new java.awt.event.MouseMotionAdapter() { public void mouseDragged(java.awt.event.MouseEvent evt) { drag(evt); } }); getContentPane().add(panel, java.awt.BorderLayout.CENTER); setSize(300,300); g = panel.getGraphics(); g2 = (java.awt.Graphics2D)g; rect = new Rectangle(10,10,10,10); g2.draw(rect); show(); } private void drag(java.awt.event.MouseEvent evt) { int q = evt.getX(); int w = evt.getY(); // g2.drawLine(x , y, q, w); } private void tegn(java.awt.event.MouseEvent evt) { rect.setLocation(x,y); repaint(); } private void exitForm(java.awt.event.WindowEvent evt) { System.exit(0); } public static void main(String args[]) { new JFrame().show(); } private javax.swing.JPanel panel; private java.awt.Graphics g; private java.awt.Graphics2D g2; private int x, y; }
16. januar 2004 - 13:07
#5
Vender tilbage senere - pt. ikke tid
tl
Nybegynder
16. januar 2004 - 13:10
#6
helt ok...
tl
Nybegynder
16. januar 2004 - 14:35
#7
seneste udgave-- kan compile, men virker mærkeligt nok stadig ikke. import java.awt.*; import java.awt.event.*; import java.awt.image.*; import javax.swing.*; public class JFrame extends javax.swing.JFrame { public Rectangle rect; public JFrame() { initComponents(); } private void initComponents() { panel = new javax.swing.JPanel(); addWindowListener(new java.awt.event.WindowAdapter() { public void windowClosing(java.awt.event.WindowEvent evt) { exitForm(evt); } }); panel.addMouseListener(new java.awt.event.MouseAdapter() { public void mousePressed(java.awt.event.MouseEvent evt) { tegn(evt); } }); panel.addMouseMotionListener(new java.awt.event.MouseMotionAdapter() { public void mouseDragged(java.awt.event.MouseEvent evt) { drag(evt); } }); getContentPane().add(panel, java.awt.BorderLayout.CENTER); setSize(300,300); show(); g = panel.getGraphics(); g2 = (java.awt.Graphics2D)g; rect = new Rectangle(100,100,100,100); g2.draw(rect); repaint(); show(); } private void drag(java.awt.event.MouseEvent evt) { int q = evt.getX(); int w = evt.getY(); // g2.drawLine(x , y, q, w); } private void tegn(java.awt.event.MouseEvent evt) { rect.setLocation(x,y); repaint(); } private void exitForm(java.awt.event.WindowEvent evt) { System.exit(0); } public static void main(String args[]) { new JFrame().show(); } private javax.swing.JPanel panel; private java.awt.Graphics g; private java.awt.Graphics2D g2; private int x, y; }
16. januar 2004 - 16:01
#8
Sådan skal den se ud for at virke. Kigger forbi senere på dagen/aftenen hvis du har spørgsmål. import java.awt.*; import java.awt.event.*; import javax.swing.*; public class JFrame extends javax.swing.JFrame { private Rectangle rect; public JFrame() { initComponents(); g = this.getGraphics(); g2 = (java.awt.Graphics2D)panel.getGraphics(); rect = new Rectangle(25,25,25,25); g2.draw(rect); } private void initComponents() { panel = new javax.swing.JPanel(); addWindowListener(new java.awt.event.WindowAdapter() { public void windowClosing(java.awt.event.WindowEvent evt) { exitForm(evt); } }); panel.addMouseListener(new java.awt.event.MouseAdapter() { public void mousePressed(java.awt.event.MouseEvent evt) { tegn(evt); } }); panel.addMouseMotionListener(new java.awt.event.MouseMotionAdapter() { public void mouseDragged(java.awt.event.MouseEvent evt) { tegn(evt); } }); panel.setBackground(java.awt.Color.WHITE); getContentPane().add(panel, java.awt.BorderLayout.CENTER); setSize(300,300); show(); } private void tegn(java.awt.event.MouseEvent evt) { super.paintComponents(g); rect.setLocation(evt.getX(), evt.getY()); g2.draw(rect); } private void exitForm(java.awt.event.WindowEvent evt) { System.exit(0); } public static void main(String args[]) { new JFrame(); } private javax.swing.JPanel panel; private java.awt.Graphics g; private java.awt.Graphics2D g2; private int x, y; }
16. januar 2004 - 18:32
#9
Fik lige tid til at kaste lidt kommentarer // Det er vigtigt at du kalder show() inden du initierer dit // graphics object, ellers får du sikkert en nullpointerException show(); g = panel.getGraphics(); g2 = (java.awt.Graphics2D)g; rect = new Rectangle(100,100,100,100); g2.draw(rect); repaint(); private void tegn(java.awt.event.MouseEvent evt) { // Det er ligeledes vigtigt at får gentegnet din Frame før // dit rektangel super.paintComponents(g); rect.setLocation(evt.getX(), evt.getY()); g2.draw(rect); }
12. februar 2005 - 16:01
#10
Alle SWING komponenter nedarver fra JComponent og alle JComponents har en paint metode... public class myPanel extends JPanel { public void paint(Graphics g) { g.setColor(Color.WHITE); g.drawLine(0, 0, this.getWidth(), this.getHeight()); // osv... /* hvis du vil kalde paint metoden på super klassen: super.paint(g); dette objekt har flere advanceret metoder: Graphics2D g2 = (Graphics2D)g; g2.setColor(Color.WHITE); g2.drawLine(0, 0, this.getWidth(), this.getHeight()); */ } } JPanel b_panel = new JPanel(); b_panel.add(new MyPanel());
Kurser inden for grundlæggende programmering