繁体   English   中英

JTextField 不会按预期将值从文本字段传递到对象字段

[英]JTextField does not pass value from textfield to object field as intended in swing

我正在使用javax.swing包编写一个 2D 绘图应用程序。 想法是创建一个DrawingApplicationFrame (扩展Jframe类),其中实例化了几个JButttonJCheckBoxJTextFields以更改绘制的状态,此外还有一个DrawingPanel实例drawpanel嵌入在此DrawingApplicationFrame类中。 我使用JTextField实例LineWidthTextDashLengthText来更改实例drawpanelWidthLength属性。 但是,文本字段似乎不接受其中的值并更改drawpanel.Widthdrawpanel.Length值。 如何修复错误以让文本字段传递值?

下面是为文本字段LineWidthTextDashLengthText创建侦听器:

    JTextField LineWidthText=new JTextField(2);
    JTextField DashLengthText=new JTextField(2);
        LineWidthText.addActionListener(new ActionListener(){
          @Override
          public void actionPerformed(ActionEvent e)
          { 
            drawpanel.Width=Float.parseFloat(LineWidthText.getText());
            drawpanel.dashed=new BasicStroke(drawpanel.Width, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL, 0, new float[]{drawpanel.Length}, 10);
            drawpanel.concrete=new BasicStroke(drawpanel.Width);
          }
          });
        
        DashLengthText.addActionListener(new ActionListener(){
          @Override
          public void actionPerformed(ActionEvent e)
          {
            drawpanel.Length=Float.parseFloat(DashLengthText.getText());
            drawpanel.dashed=new BasicStroke(drawpanel.Width, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL, 0, new float[]{drawpanel.Length}, 10);     
          }
          });

这是 DrawPanel 类的代码:

    public class DrawPanel extends JPanel
    {
        Color ColorOne=Color.BLACK;
        Color ColorTwo=Color.BLACK;
        Boolean FilledOrNot=false, UseGradientOrNot=false, DashedOrNot=false, isDragged=false;
        float Width=10;
        float Length=10;
        String ShapeChoice="Line";
        ArrayList<MyShapes> ShapeObjects=new ArrayList<MyShapes>();
        
        Paint gradient=new GradientPaint(100, 100, ColorOne, 100+Width*2, 100+Width*2, ColorTwo, true);
        Paint mono=new GradientPaint(100, 100, ColorOne, 100+Width*2, 100+Width*2, ColorOne, true);
        Stroke dashed=new BasicStroke(Width, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL, 0, new float[]{Length}, 10);
        Stroke concrete=new BasicStroke(Width);

        Point start=new Point();
        Point stop=new Point();
        Point drag=new Point();
        
        JLabel label=new JLabel("(,)");
        
        public DrawPanel(String caption)
        {
          this.setBackground(Color.WHITE);
          this.setLayout(new BorderLayout());
          this.add(label, BorderLayout.SOUTH);
          this.label.setVisible(true);
        }

        @Override
        @SuppressWarnings("empty-statement")
        public void paintComponent(Graphics g){
            super.paintComponent(g);
            Graphics2D g2d = (Graphics2D) g;
            //loop through and draw each shape in the shapes arraylist
            addMouseListener(new MouseHandler());
            for(int i=0; i<ShapeObjects.size(); i++){
                ShapeObjects.get(i).draw(g2d);
                }  
            }
        
        void removeLastElement(){
          ShapeObjects.remove(ShapeObjects.size()-1);
          repaint();
        }
        
        void clearAllElements(){
          ShapeObjects.clear();
          repaint();
        }
        
        public void addShape(MyShapes shape){
          ShapeObjects.add(shape);
        }

        public class MouseHandler extends MouseAdapter implements MouseMotionListener
        {

            
            public void mousePressed(MouseEvent event)
            {
                DrawPanel dp=(DrawPanel) event.getSource();
                dp.start=(new Point(event.getX(), event.getY()));
            }
   
            public void mouseReleased(MouseEvent event)
            {
                DrawPanel dp=(DrawPanel) event.getSource();
                dp.stop=(new Point(event.getX(), event.getY()));
                switch(ShapeChoice){
                  
                    case "Line":
                        if(UseGradientOrNot&&DashedOrNot)
                          dp.addShape(new MyLine(dp.start, dp.stop, dp.gradient, dp.dashed));
                        else if((UseGradientOrNot==false)&&DashedOrNot)
                          dp.addShape(new MyLine(dp.start, dp.stop, dp.mono, dp.dashed));
                        else if(UseGradientOrNot&&(DashedOrNot==false))
                          dp.addShape(new MyLine(dp.start, dp.stop, dp.gradient, dp.concrete));
                        else if((UseGradientOrNot==false)&&(DashedOrNot)==false)
                          dp.addShape(new MyLine(dp.start, dp.stop, dp.mono, dp.concrete));
                        break;
                        
                    case "Oval":
                        if(UseGradientOrNot&&DashedOrNot)
                          dp.addShape(new MyOval(dp.start, dp.stop, dp.gradient, dp.dashed, dp.FilledOrNot));
                        else if((UseGradientOrNot==false)&&DashedOrNot)
                          dp.addShape(new MyOval(dp.start, dp.stop, dp.mono, dp.dashed, dp.FilledOrNot));
                        else if(UseGradientOrNot&&(DashedOrNot==false))
                          dp.addShape(new MyOval(dp.start, dp.stop, dp.gradient, dp.concrete, dp.FilledOrNot));
                        else if((UseGradientOrNot==false)&&(DashedOrNot)==false)
                          dp.addShape(new MyOval(dp.start, dp.stop, dp.mono, dp.concrete, dp.FilledOrNot));
                        break;
                        
                    case "Rectangle":
                        if(UseGradientOrNot&&DashedOrNot)
                          dp.addShape(new MyRectangle(dp.start, dp.stop, dp.gradient, dp.dashed, dp.FilledOrNot));
                        else if((UseGradientOrNot==false)&&DashedOrNot)
                          dp.addShape(new MyRectangle(dp.start, dp.stop, dp.mono, dp.dashed, dp.FilledOrNot));
                        else if(UseGradientOrNot&&(DashedOrNot==false))
                          dp.addShape(new MyRectangle(dp.start, dp.stop, dp.gradient, dp.concrete, dp.FilledOrNot));
                        else if((UseGradientOrNot==false)&&(DashedOrNot)==false)
                          dp.addShape(new MyRectangle(dp.start, dp.stop, dp.mono, dp.concrete, dp.FilledOrNot));
                        break;
                  }
                        
                    repaint();
                }
        }

    }

是我自己解决的。 有两种方法:一种是从按钮上的文本字段分配取值任务。 另一种是简单地按“Enter”键! 事实证明,代码工作得很好。 仅当将值简单地输入到文本字段而不进行任何进一步操作时,它才起作用!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM