如何重绘Java Applet

时间:2013-02-23 00:03:31

标签: java swing applet awt

我有以下代码,它是一个将Celsius转换为Fahrenheit的简单Applet。

如果输入了正确的数字并单击了该按钮,则转换温度并显示没有问题。但是,如果文本框包含无效条目,则消息需要显示在错误面板上的标签上,但除非我调整小程序的大小,否则不会发生这种情况。所以问题是“如何重新绘制!!!”

import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class TemperatureConverter extends Applet{

private JLabel lblCel=new JLabel("Celsius Temperature   :");
private JLabel lblFar=new JLabel("Fahrenheit value      :");
private JLabel lblResult=new JLabel("");
private JLabel lblError=new JLabel("");
private JTextField txtFahr;
private JPanel celsPanel;
private JPanel farPanel;
private JPanel errorPanel;
private JButton btnEnter = new JButton("Convert");
public double temp = 0.0;

public void init(){



    celsPanel = new JPanel(new GridLayout(1,3,2,2));
    celsPanel.add(lblCel);
    txtFahr = new JTextField(50);
    celsPanel.add(txtFahr);
    btnEnter.addActionListener(new ActionListener() {       
        @Override
        public void actionPerformed(ActionEvent arg0) {
            try{
                temp = Double.parseDouble(txtFahr.getText());
                double X = (temp - 32)* 0.69;
                lblResult.setText(String.valueOf(X));
                lblError.setText(" ");
            }
            catch(NumberFormatException ex){
                lblError.setText("Invalid Celsius Value");
            }
        }
    });
    celsPanel.add(btnEnter);

    farPanel = new JPanel(new GridLayout(1,2,2,2));
    farPanel.add(lblFar);
    lblResult.setSize(100, 30);
    farPanel.add(lblResult);

    errorPanel = new JPanel();
    lblError.setSize(100, 30);
    errorPanel.add(lblError);

    setLayout(new GridLayout(3,2,2,2));
    add(celsPanel);
    add(farPanel);
    add(errorPanel);
    setSize(550,200);

}

}

有人可以解决这个问题吗?我在考虑标签尺寸问题,但后来我不确定。

2 个答案:

答案 0 :(得分:1)

试试这个:

    btnEnter.addActionListener(new ActionListener() {       
        @Override
        public void actionPerformed(ActionEvent arg0) {
            try{
                temp = Double.parseDouble(txtFahr.getText());
                double X = (temp - 32)* 0.69;
                lblResult.setText(String.valueOf(X));
                lblError.setText(" ");
                this.repaint();
            }
            catch(NumberFormatException ex){
                lblError.setText("Invalid Celsius Value");
            }
        }
    });

答案 1 :(得分:0)

  1. 扩展JApplet,在html页面的标签中使applet的高度更大
  2. 不能使用网格布局和设置大小,如果你想使用自己的大小然后setLayout Manager为null,那么applet然后setBounds
  3. 调用组件上的invalidate以强制重绘lblError.invalidate()如果1和2不起作用
  4. 关于null布局管理器&设置Bounds:这适用于所有操作系统(已经过Apple,unix,windows和linux测试),尽管教科书上说使用布局管理器实际上都是非常糟糕的,在12年的测试中,大小高达1000x800的像素。样本image xy; scrabble rack; info capture

    参考阅读有关javadoc

    中的无效,重绘和忽略重绘的内容