我正在尝试制作绘画程序的项目中。到目前为止,我已经使用Netbeans来创建GUI并设置程序。
到目前为止,我已经能够调用在其中绘制所需的所有坐标,但是我对如何在其中实际绘制感到非常困惑。
在我的代码接近尾声时,我在面板内部进行绘制的尝试失败。
谁能在这样的示例中解释/显示如何使用图形?
我发现的所有示例都创建了一个类并对其进行扩展,JPanel但是我不知道是否可以这样做,因为它是在netbeans中生成的。
我需要JPanel在我的内部绘制一个JFrame。我不知道将图形类放在哪里。
JPanel
JFrame
JavaPaintUI类别
package javapaint; import java.awt.*; import javax.swing.*; public class JavaPaintUI extends javax.swing.JFrame { public JavaPaintUI() { initComponents(); } private void initComponents() { jPanel2 = new javax.swing.JPanel(); jPanel2.setBackground(new java.awt.Color(255, 255, 255)); jPanel2.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.RAISED)); jPanel2.addMouseListener(new java.awt.event.MouseAdapter() { public void mousePressed(java.awt.event.MouseEvent evt) { jPanel2MousePressed(evt); } public void mouseReleased(java.awt.event.MouseEvent evt) { jPanel2MouseReleased(evt); } }); jPanel2.addMouseMotionListener(new java.awt.event.MouseMotionAdapter() { public void mouseDragged(java.awt.event.MouseEvent evt) { jPanel2MouseDragged(evt); } }); pack(); }// </editor-fold> int currentX, currentY, oldX, oldY; private void jPanel2MouseDragged(java.awt.event.MouseEvent evt) { if (tool == 1) { currentX = evt.getX(); currentY = evt.getY(); oldX = currentX; oldY = currentY; System.out.println(currentX + " " + currentY); System.out.println("PEN!!!!"); } } private void jPanel2MousePressed(java.awt.event.MouseEvent evt) { oldX = evt.getX(); oldY = evt.getY(); System.out.println(oldX + " " + oldY); } //mouse released// private void jPanel2MouseReleased(java.awt.event.MouseEvent evt) { if (tool == 2) { currentX = evt.getX(); currentY = evt.getY(); System.out.println("line!!!! from" + oldX + "to" + currentX); } } //set ui visible// public static void main(String args[]) { java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new JavaPaintUI().setVisible(true); } }); } // Variables declaration - do not modify private javax.swing.JPanel jPanel2; // End of variables declaration class jPanel2 extends JPanel { @Override public void paintComponent(Graphics g) { super.paintComponent(g); g.drawString("BLAH", 20, 20); g.drawRect(200, 200, 200, 200); } } }
注意额外的注释。
import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.border.*; class JavaPaintUI extends JFrame { private int tool = 1; int currentX, currentY, oldX, oldY; public JavaPaintUI() { initComponents(); } private void initComponents() { // we want a custom Panel2, not a generic JPanel! jPanel2 = new Panel2(); jPanel2.setBackground(new java.awt.Color(255, 255, 255)); jPanel2.setBorder(BorderFactory.createBevelBorder(BevelBorder.RAISED)); jPanel2.addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent evt) { jPanel2MousePressed(evt); } public void mouseReleased(MouseEvent evt) { jPanel2MouseReleased(evt); } }); jPanel2.addMouseMotionListener(new MouseMotionAdapter() { public void mouseDragged(MouseEvent evt) { jPanel2MouseDragged(evt); } }); // add the component to the frame to see it! this.setContentPane(jPanel2); // be nice to testers.. this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); pack(); }// </editor-fold> private void jPanel2MouseDragged(MouseEvent evt) { if (tool == 1) { currentX = evt.getX(); currentY = evt.getY(); oldX = currentX; oldY = currentY; System.out.println(currentX + " " + currentY); System.out.println("PEN!!!!"); } } private void jPanel2MousePressed(MouseEvent evt) { oldX = evt.getX(); oldY = evt.getY(); System.out.println(oldX + " " + oldY); } //mouse released// private void jPanel2MouseReleased(MouseEvent evt) { if (tool == 2) { currentX = evt.getX(); currentY = evt.getY(); System.out.println("line!!!! from" + oldX + "to" + currentX); } } //set ui visible// public static void main(String args[]) { EventQueue.invokeLater(new Runnable() { public void run() { new JavaPaintUI().setVisible(true); } }); } // Variables declaration - do not modify private JPanel jPanel2; // End of variables declaration // This class name is very confusing, since it is also used as the // name of an attribute! //class jPanel2 extends JPanel { class Panel2 extends JPanel { Panel2() { // set a preferred size for the custom panel. setPreferredSize(new Dimension(420,420)); } @Override public void paintComponent(Graphics g) { super.paintComponent(g); g.drawString("BLAH", 20, 20); g.drawRect(200, 200, 200, 200); } } }