栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在JForm Java上绘制形状

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在JForm Java上绘制形状

我在您的代码中看到了一些问题:

  1. 您正在扩展Jframe,您不应该这样做,因为可以将其读DrawShapesGUI 为a Jframe,Jframe是一个刚性容器,而是基于JPanels创建您的GUI 。有关更多信息,请参见使用Exting vs在类内部调用Java Swing。

  2. 您有一个称为的成员,figureID但您从未使用过它,因为每次figureID在每个“ ActionPerformed”方法中创建一个新的局部变量时:

    int figureID = 5;

int从每个句子中删除,可能这就是为什么什么都没发生的问题。

  1. 您正在覆盖paint()方法,而应该覆盖paintComponent()。但是,我必须祝贺你至少打来电话super.paint(g)。

    1. 根本不是问题,但是一种改进是使用Shapes API绘制形状而不是调用g.drawLine()和所有这些调用。

    2. 您正在使用java.awt.EventQueue.invokeLater()应将Java 1.3版本更改为SwingUtilities.invokeLater()(再次改进)

ActionListener仅使用其中的一种方法和条件,就可以以更好的方式改进s。


考虑到以上几点,我制作了一个新程序,该程序产生以下输出:

import java.awt.BorderLayout;import java.awt.Color;import java.awt.Dimension;import java.awt.Graphics;import java.awt.Graphics2D;import java.awt.Polygon;import java.awt.Shape;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.geom.Arc2D;import java.awt.geom.Ellipse2D;import java.awt.geom.Line2D;import java.awt.geom.Rectangle2D;import javax.swing.ButtonGroup;import javax.swing.Jframe;import javax.swing.JPanel;import javax.swing.JRadioButton;import javax.swing.SwingUtilities;@SuppressWarnings("serial")public class DrawShapesGUI {    private Jframe frame;    private JRadioButton lineButton;    private JRadioButton rectButton;    private JRadioButton ovalButton;    private JRadioButton arcButton;    private JRadioButton polygonButton;    private ButtonGroup group;    private JPanel pane;    private CustomShape renderShape;    private Shape shape;    private ActionListener listener = new ActionListener() {        @Override        public void actionPerformed(ActionEvent e) { if (e.getSource().equals(lineButton)) {     shape = new Line2D.Double(50, 50, 100, 100);     renderShape.setShape(shape); } else if (e.getSource().equals(rectButton)) {     shape = new Rectangle2D.Double(50, 50, 100, 100);     renderShape.setShape(shape); } else if (e.getSource().equals(ovalButton)) {     shape = new Ellipse2D.Double(100, 100, 100, 60);     renderShape.setShape(shape); } else if (e.getSource().equals(arcButton)) {     shape = new Arc2D.Double(50, 50, 200, 200, 90, 30, Arc2D.OPEN);     renderShape.setShape(shape); } else if (e.getSource().equals(polygonButton)) {     Polygon poly = new Polygon();     poly.addPoint(100, 50);     poly.addPoint(150, 50);     poly.addPoint(200, 100);     poly.addPoint(150, 150);     poly.addPoint(100, 150);     poly.addPoint(50, 100);     shape = poly;     renderShape.setShape(shape); }         }    };    public static void main(String args[]) {        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(DrawShapesGUI.class.getName()).log(java.util.logging.Level.SEVERE, null,         ex);        } catch (InstantiationException ex) { java.util.logging.Logger.getLogger(DrawShapesGUI.class.getName()).log(java.util.logging.Level.SEVERE, null,         ex);        } catch (IllegalAccessException ex) { java.util.logging.Logger.getLogger(DrawShapesGUI.class.getName()).log(java.util.logging.Level.SEVERE, null,         ex);        } catch (javax.swing.UnsupportedLookAndFeelException ex) { java.util.logging.Logger.getLogger(DrawShapesGUI.class.getName()).log(java.util.logging.Level.SEVERE, null,         ex);        }        SwingUtilities.invokeLater(new Runnable() { public void run() {     new DrawShapesGUI().createAndShowGUI(); }        });    }    class CustomShape extends JPanel {        private Shape shape;        public Shape getShape() { return shape;        }        public void setShape(Shape shape) { this.shape = shape; revalidate(); repaint();        }        @Override        public void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D g2d = (Graphics2D) g.create(); if (shape != null) {     g2d.setColor(Color.RED);     if (shape instanceof Line2D || shape instanceof Arc2D) {         g2d.draw(shape);     } else {         g2d.fill(shape);     } }        }        @Override        public Dimension getPreferredSize() { return new Dimension(150, 200);        }    }    public void createAndShowGUI() {        frame = new Jframe(getClass().getSimpleName());        lineButton = new JRadioButton("Line");        rectButton = new JRadioButton("Rectangle");        ovalButton = new JRadioButton("Oval");        arcButton = new JRadioButton("Arc");        polygonButton = new JRadioButton("Polygon");        lineButton.addActionListener(listener);        rectButton.addActionListener(listener);        ovalButton.addActionListener(listener);        arcButton.addActionListener(listener);        polygonButton.addActionListener(listener);        group = new ButtonGroup();        group.add(lineButton);        group.add(rectButton);        group.add(ovalButton);        group.add(arcButton);        group.add(polygonButton);        pane = new JPanel();        pane.add(lineButton);        pane.add(rectButton);        pane.add(ovalButton);        pane.add(arcButton);        pane.add(polygonButton);        renderShape = new CustomShape();        frame.add(pane, BorderLayout.PAGE_START);        frame.add(renderShape, BorderLayout.CENTER);        frame.pack();        frame.setVisible(true);        frame.setDefaultCloseOperation(Jframe.EXIT_ON_CLOSE);    }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/508033.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号