i am very bigginer to java .i trying to draw a line in a jpanel (using netbean ide)..i read some articles .but problem is it draw thais line without calling it .i want to draw l
Here is an example to help you:
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.geom.Line2D;
import java.util.ArrayList;
import java.util.Random;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
/**
*
* @author David
*/
public class Test {
private static void createAndShowGUI() {
JFrame frame = new JFrame("Frame");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
final LinePanel linePanel = new LinePanel();
JPanel buttonPanel = new JPanel();
JButton buttonDrawRandomLine = new JButton("Draw Random Line");
final Random rand = new Random();
buttonDrawRandomLine.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Line2D line = new Line2D.Double(rand.nextInt(200), rand.nextInt(200), rand.nextInt(200), rand.nextInt(200));
linePanel.addLine(line);
}
});
buttonPanel.add(buttonDrawRandomLine);
frame.add(buttonPanel, BorderLayout.SOUTH);
frame.add(linePanel, BorderLayout.CENTER);
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
//Schedule a job for the event-dispatching thread:
//creating and showing this application's GUI.
javax.swing.SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
createAndShowGUI();
}
});
}
}
class LinePanel extends JPanel {
ArrayList lines = new ArrayList<>();
public void addLine(Line2D l) {
lines.add(l);
repaint();
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
for (Line2D l : lines) {
g2d.draw(l);
}
}
@Override
public Dimension getPreferredSize() {
return new Dimension(300, 300);
}
}
1) I would not suggest learning Swing via Netbeans Drag and Drop, first do it by hand, than use the Drag and drop to make your life easier once you understand how things work.
2) Do not extend a JFrame
(for OOP best practice) we dont extend classes unless we are adding functionality to them which they do not already support
3) Dont override paint
of JFrame
unless absolutely necessary rather use JComponent
like JPanel
and override paintComponent