Note that there are some explanatory texts on larger screens.

plurals
  1. POhow to drawline with button event?
    text
    copied!<p>MY program here is basically a JPanel with three buttons I want to use one of the buttons to drawLine on the JPanel. I have two classes one that extends JPanel (Panel.class) and the other that extends the JFrame (frame.class)</p> <p>The button is in the frame.class which calls a method in panel.class called drawer(); to which the button event passes xy co-ordinates and then drawer passes those co-ordinates to four int var in panel.class and invoke repaint(); but no line in drawn. </p> <p>Panel.class code :</p> <pre><code>package my.jpanel; import java.awt.*; import java.awt.event.*; import java.io.IOException; import java.util.ArrayList; import javax.swing.*; public class Panel extends javax.swing.JPanel { //draws using the initial (x1, y1) co-ordiantes of the previous i in the array private int x1, y1, x2, y2; ArrayList linex1 = new ArrayList(); ArrayList linex2 = new ArrayList(); ArrayList liney1 = new ArrayList(); ArrayList liney2 = new ArrayList(); public int fx1, fy1, fx2, fy2; public void drawer(int fx1i, int fy1i, int fx2i, int fy2i){ fx1 = fx1i; fy1 = fy1i; fx2 = fx2i; fy2 = fy2i; repaint(); } public Panel() { addMouseListener( new MouseAdapter(){ public void mousePressed (MouseEvent e){ x1 = e.getX(); y1 = e.getY(); int z = linex1.size(); System.out.println("z: "+z); if (z!=0){ linex1.add(linex2.get(z-1)); liney1.add(liney2.get(z-1));} else{ linex1.add(x1); liney1.add(y1); System.out.println("x1:"+x1);} } public void mouseReleased( MouseEvent e){ x2 = e.getX(); y2 = e.getY(); linex2.add(x2); liney2.add(y2); System.out.println("x1:"+x1+" x2:"+x2+" y1: "+y1+" y2: "+y2); double slope = ((((double)y2)-((double)y1))/(((double)x2)-((double)x1))); System.out.println("Slope of line: "+slope); repaint(); } }); addMouseMotionListener ( new MouseMotionAdapter(){ public void mouseDragged(MouseEvent e){ x2 = e.getX(); y2 = e.getY(); repaint(); } }); } public Dimension getPreferredSize(){ return new Dimension(250, 150); } public void paintComponent( Graphics g ){ super.paintComponent(g); // g.drawOval(Math.min(x1, x2), Math.min(y1, y2), Math.abs(x1-x2), Math.abs(y1-y2)); g.drawLine(fx1, fy1, fx2, fy2); g.drawLine(x1, y1, x2, y2); int lx1 = linex1.size(); int lx2 = linex2.size(); int ly1 = liney1.size(); int ly2 = liney2.size(); System.out.println("lx1: "+lx1); System.out.println("lx2: "+lx2); System.out.println("ly1: "+ly1); System.out.println("ly2: "+ly2); System.out.println("-------------"); if ((lx1 != 0 &amp;&amp; lx2 != 0 &amp;&amp; ly1 != 0 &amp;&amp; ly2 != 0) &amp;&amp; (lx1 != 1 &amp;&amp; ly1 != 1 &amp;&amp; !(lx2 &lt; (lx1)) &amp;&amp; !(ly2 &lt; (ly1)))){ for (int i=0; i&lt;lx1; ++i){ int x1x = ((int) (linex1.get(i))); int x2x = ((int) (linex2.get(i))); int y1y = ((int) (liney1.get(i))); int y2y = ((int) (liney2.get(i))); g.drawLine(x1x,y1y,x2x, y2y);} if ((lx1 != 0 &amp;&amp; lx2 != 0 &amp;&amp; ly1 != 0 &amp;&amp; ly2 != 0) &amp;&amp; (lx1 != 1 &amp;&amp; ly1 != 1 &amp;&amp; lx2&lt;lx1 &amp;&amp; ly2&lt;ly1)){ for (int x1=0, x2=0; x1&lt;linex1.size() &amp;&amp; x2&lt;linex2.size()-1; ++x1, ++x2){ int x1x = ((int) (linex1.get(x1))); int x2x = ((int) (linex2.get(x2))); int y1y = ((int) (liney1.get(y1))); int y2y = ((int) (liney2.get(y2))); g.drawLine(x1x,y1y,x2x, y2y);} } } } public void Panelint() { initComponents(); } @SuppressWarnings("unchecked") // &lt;editor-fold defaultstate="collapsed" desc="Generated Code"&gt; private void initComponents() { setBackground(new java.awt.Color(153, 204, 255)); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGap(0, 400, Short.MAX_VALUE) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGap(0, 300, Short.MAX_VALUE) ); }// &lt;/editor-fold&gt; // Variables declaration - do not modify // End of variables declaration </code></pre> <p>}</p> <p>frame.class code is below:</p> <pre><code>/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package my.jpanel; import java.awt.Graphics; import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.Iterator; import java.util.Scanner; // } public class frame extends javax.swing.JFrame { ArrayList&lt;Integer&gt; drawnpattern = new ArrayList&lt;Integer&gt;(); ArrayList&lt;Integer&gt; filepattern = new ArrayList&lt;Integer&gt;(); public frame() { initComponents(); } /** * This method is called from within the constructor to initialize the form. * WARNING: Do NOT modify this code. The content of this method is always * regenerated by the Form Editor. */ @SuppressWarnings("unchecked") // &lt;editor-fold defaultstate="collapsed" desc="Generated Code"&gt; private void initComponents() { panel1 = new my.jpanel.Panel(); btn = new javax.swing.JButton(); jScrollPane1 = new javax.swing.JScrollPane(); jta = new javax.swing.JTextArea(); jButton1 = new javax.swing.JButton(); jButtondraw = new javax.swing.JButton(); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); panel1.setBackground(new java.awt.Color(153, 204, 255)); javax.swing.GroupLayout panel1Layout = new javax.swing.GroupLayout(panel1); panel1.setLayout(panel1Layout); panel1Layout.setHorizontalGroup( panel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGap(0, 250, Short.MAX_VALUE) ); panel1Layout.setVerticalGroup( panel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGap(0, 150, Short.MAX_VALUE) ); btn.setText("Print Co-ordinate and Save File"); btn.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { btnActionPerformed(evt); } }); jta.setColumns(20); jta.setRows(5); jScrollPane1.setViewportView(jta); jButton1.setText("Match patterns"); jButton1.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButton1ActionPerformed(evt); } }); jButtondraw.setText("Draw Both line"); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jScrollPane1) .addGroup(layout.createSequentialGroup() .addGap(18, 18, 18) .addComponent(btn) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 24, Short.MAX_VALUE) .addComponent(jButtondraw) .addGap(18, 18, 18) .addComponent(jButton1) .addGap(24, 24, 24)) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(panel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(107, 107, 107)) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addComponent(panel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 43, Short.MAX_VALUE) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(btn) .addComponent(jButton1) .addComponent(jButtondraw)) .addGap(18, 18, 18) .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 107, javax.swing.GroupLayout.PREFERRED_SIZE)) ); pack(); }// &lt;/editor-fold&gt; private void btnActionPerformed(java.awt.event.ActionEvent evt) { String axis = null; for (int i=0; i&lt;(panel1.linex1.size()); ++i ){ axis = ("Line "+i+": "+" x1: "+panel1.linex1.get(i)+" y1: "+panel1.liney1.get(i)+" x2: "+panel1.linex2.get(i)+" y2: "+panel1.liney2.get(i)+"."); jta.append(axis); jta.append("\n"); } try { File file = new File("I:/Programming/linedata.txt"); FileWriter fw = new FileWriter(file.getAbsoluteFile(),true); // append=true so that we don't overwrite the whole file BufferedWriter bw = new BufferedWriter(fw); // buffer writing for (int i=0; i&lt;(panel1.linex1.size()); ++i ){ bw.write("x1:"+panel1.linex1.get(i)); bw.write("y1:"+panel1.liney1.get(i)); bw.write("x2:"+panel1.linex2.get(i)); bw.write("y2:"+panel1.liney2.get(i)); } bw.flush(); bw.close(); } catch (IOException e) { e.printStackTrace(); } } private void jButtondrawActionPerformed(java.awt.event.ActionEvent evt){ //for (int i=0; i&lt;((filepattern.size())/4); i++){ filepattern.add(26); filepattern.add(50); filepattern.add(36); filepattern.add(130); filepattern.add(36); filepattern.add(130); filepattern.add(64); filepattern.add(97); filepattern.add(64); filepattern.add(97); filepattern.add(81); filepattern.add(127); filepattern.add(81); filepattern.add(127); filepattern.add(100); filepattern.add(96); filepattern.add(100); filepattern.add(96); filepattern.add(122); filepattern.add(128); filepattern.add(122); filepattern.add(128); filepattern.add(127); filepattern.add(57); int fx1 = filepattern.get(0); int fy1 = filepattern.get(1); int fx2 = filepattern.get(2); int fy2 = filepattern.get(3); panel1.drawer(fx1, fy1, fx2, fy2); } private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { String axis = null; // add into array current drawn pattern for (int i=0; i&lt;(panel1.linex1.size()); ++i ){ drawnpattern.add((int)panel1.linex1.get(i)); drawnpattern.add((int)panel1.liney1.get(i)); drawnpattern.add((int)panel1.linex2.get(i)); drawnpattern.add((int)panel1.liney2.get(i)); // append current drawn pattern line data axis = ("Line "+i+": "+" x1: "+panel1.linex1.get(i)+" y1: "+panel1.liney1.get(i)+" x2: "+panel1.linex2.get(i)+" y2: "+panel1.liney2.get(i)+"."); jta.append(axis); jta.append("\n"); // read file and append file data to filepattern array filepattern.add(26); filepattern.add(50); filepattern.add(36); filepattern.add(130); filepattern.add(36); filepattern.add(130); filepattern.add(64); filepattern.add(97); filepattern.add(64); filepattern.add(97); filepattern.add(81); filepattern.add(127); filepattern.add(81); filepattern.add(127); filepattern.add(100); filepattern.add(96); filepattern.add(100); filepattern.add(96); filepattern.add(122); filepattern.add(128); filepattern.add(122); filepattern.add(128); filepattern.add(127); filepattern.add(57); // after adding original data then we need to calculate the values of original data and also the incoming data. // then we need to use our formula to compare } } /** * @param args the command line arguments */ public static void main(String args[]) { /* Set the Nimbus look and feel */ //&lt;editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) "&gt; /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel. * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html */ try { for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) { if ("Nimbus".equals(info.getName())) { javax.swing.UIManager.setLookAndFeel(info.getClassName()); break; } } } catch (ClassNotFoundException ex) { java.util.logging.Logger.getLogger(frame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (InstantiationException ex) { java.util.logging.Logger.getLogger(frame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (IllegalAccessException ex) { java.util.logging.Logger.getLogger(frame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (javax.swing.UnsupportedLookAndFeelException ex) { java.util.logging.Logger.getLogger(frame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } //&lt;/editor-fold&gt; /* Create and display the form */ java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new frame().setVisible(true); } }); } // Variables declaration - do not modify private javax.swing.JButton btn; private javax.swing.JButton jButton1; private javax.swing.JButton jButtondraw; private javax.swing.JScrollPane jScrollPane1; private javax.swing.JTextArea jta; private my.jpanel.Panel panel1; // End of variables declaration } </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload