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 );
}
}
3条答案
按热度按时间bihw5rsg1#
可以使用String.valueOf(d)将Double转换为String,然后使用g.drawString方法将其绘制在图形上
nc1teljy2#
这个问题的背景很小,很难提供合适的答案。
首先,每次调用
super.paint
时,都有可能清除以前绘制的内容,使整个循环变得毫无价值...其次,你也应该尽可能避免幻数。
第三,在循环中执行双重迭代(
it.next
)可能会导致NoSuchElementException 第四,
Graphics不提供任何方法来绘制
String以外的任何东西,所以你必须将
double值转换为
String`值,没有其他选择...您可能希望特别看看2D Graphics和Working with Text APIs。
最后,你应该避免覆盖
paint
方法。如果你是从JFrame
或Frame
之类的东西覆盖这个方法,那么你应该创建一个自定义组件(从JPanel
之类的东西扩展),并将你的自定义绘画放在那里。除此之外,它是双缓冲的。aiqt4smr3#
public void paint(Graphics g)方法paint()让我们可以访问Graphics类的对象,使用Graphics类的对象,我们可以调用Graphics类的drawString()方法在applet窗口中写入文本消息。