java public void paint(Graphics g)不是为double绘制,而是为string绘制

hlswsv35  于 2023-04-10  发布在  Java
关注(0)|答案(3)|浏览(121)

public void paint(Graphics g)不是为double绘制,而是为string绘制,我想将string转换为double。
所以我试图做一个堆栈计算器,我使用链表来做它与双打的一部分,油漆是不做我想要的。我想要的是,我有按钮举行的加法和除法等。我试图在一个数字,它会画它马上在我的窗口,它没有这样做。我使用Eclipse。

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import NumberTree.Ornament;
import java.util.Iterator;
import java.util.LinkedList;

public class StackCalc extends JFrame implements ActionListener {
    private   LinkedList<Double> values;
    double value1 , value2 ;

    JTextField theTextField;
    JButton boxButton;

    public static void main ( String[] args) {
         new StackCalc();
    }

    public StackCalc() {
        setDefaultCloseOperation( EXIT_ON_CLOSE );

        setLayout( new FlowLayout());
        setTitle("StackCalc");
        setSize(new Dimension(600,600));

        boxButton = new JButton("add");
        add(boxButton);
        boxButton.addActionListener( this );
        boxButton = new JButton("multi");
        add(boxButton);
        boxButton.addActionListener( this );
        boxButton = new JButton("divide");
        add(boxButton);
        boxButton.addActionListener( this );
        boxButton = new JButton("subt");
        add(boxButton);
        boxButton.addActionListener( this );

        theTextField = new JTextField("Write Something ");
        add(theTextField);
        theTextField.addActionListener( this );

        values = new LinkedList<Double>(); // make the stack
        setVisible(true);
  }

public void actionPerformed(ActionEvent e) {
    if  ( e.getSource()==theTextField )  {
        value1 = Double.parseDouble(theTextField.getText());
        values.push(value1);
      }
}

public void add() {//return nothing
    value1=values.pop();
    value2=values.pop();
    values.push (value1 + value2);
}

public void multi() { //return nothing
    value1=values.pop();
    value2=values.pop();
    values.push (value1 * value2);
}

public void divide() {//return nothing
    value1=values.pop();
    value2=values.pop();
    values.push (value1 / value2);
}

public void subt() {//return nothing
    value1=values.pop();
    value2=values.pop();
    values.push (value1 - value2);
}

public void paint( Graphics g ) {
    Iterator it = values.iterator();
    while (it.hasNext()) {
        double d = (Double)(it.next()); 
        Double d1 = (Double)(it.next()); 
        System.out.println("d="+d + d1 );

        super.paint(g);
        //((LinkedList) values).paint(g);
        //values = LinkedList.paint(g);

        g.create(29, 40, 100, 200); // at the bottom of the screen
        //g.drawString( value2, 50,420 ); 
       //g.drawString( values, 50,480 );    
    }
}
bihw5rsg

bihw5rsg1#

可以使用String.valueOf(d)将Double转换为String,然后使用g.drawString方法将其绘制在图形上

nc1teljy

nc1teljy2#

这个问题的背景很小,很难提供合适的答案。
首先,每次调用super.paint时,都有可能清除以前绘制的内容,使整个循环变得毫无价值...
其次,你也应该尽可能避免幻数。
第三,在循环中执行双重迭代(it.next)可能会导致NoSuchElementException 第四,Graphics不提供任何方法来绘制String以外的任何东西,所以你必须将double值转换为String`值,没有其他选择...

public void paint( Graphics g )
{
    super.paint(g);
    FontMetrics fm = g.getFontMetrics();
    Iterator it = values.iterator();
    int width = getWidth();
    int height = getHeight();   
    int y = height;
    while (it.hasNext())
    {
        double d = (Double)(it.next()); 
        y -= fm.getHeight();
        String text = NumberFormatter.getNumberFormat().format(d);
        int x = width - fm.stringWidth(text);
        g.drawString(text, x, y + fm.getAscent());
    }
}

您可能希望特别看看2D GraphicsWorking with Text APIs
最后,你应该避免覆盖paint方法。如果你是从JFrameFrame之类的东西覆盖这个方法,那么你应该创建一个自定义组件(从JPanel之类的东西扩展),并将你的自定义绘画放在那里。除此之外,它是双缓冲的。

aiqt4smr

aiqt4smr3#

public void paint(Graphics g)方法paint()让我们可以访问Graphics类的对象,使用Graphics类的对象,我们可以调用Graphics类的drawString()方法在applet窗口中写入文本消息。

相关问题