【问题标题】:How to repaint Java Applet如何重绘 Java Applet
【发布时间】:2013-02-08 17:28:24
【问题描述】:

我有以下代码,它是一个将摄氏温度转换为华氏温度的简单小程序。

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

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);

}

}

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

【问题讨论】:

  • 为什么这个问题值得 -1 ?似乎拒绝投票已成为这里某些人的“民族运动”:O
  • 我也不明白反对票。
  • @deau 是的......不幸的是......管理员需要解决这种欺凌问题,就像他们要求人们在询问任何事情之前“做好功课”一样
  • @deau 一个小程序(AppletJApplet)没有pack() 方法,但代码应该调用validate()

标签: java swing applet awt


【解决方案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.不要扩展小程序。这是一个 Swing Applet,因此您应该扩展 JApplet。 2.不知道为什么你有问题,代码对我来说很好。您不需要调用 repaint()。 Swing 足够聪明,可以在使用 setText() 方法时重新绘制组件。
【解决方案2】:
  1. 扩展JApplet,让html页面tag中applet的高度变大
  2. 不能使用网格布局和设置大小,如果你想使用自己的大小,则将布局管理器设置为空,然后设置边界
  3. 如果 1 和 2 不起作用,则在组件上调用 invalidate 以强制重绘 lblError.invalidate()

关于空布局管理器和设置边界:这适用于所有操作系统(已在 Apple、unix、windows 和 linux 上测试过),尽管教科书说在现实中使用布局管理器都非常愚蠢,像素大小高达 1000x800我的测试超过 12 年。样品image xyscrabble rack ; info capture

参考阅读 javadoc 中的无效、重绘和忽略重绘

【讨论】:

    猜你喜欢
    • 2013-10-11
    • 1970-01-01
    • 2011-09-17
    • 1970-01-01
    • 2011-02-25
    • 2013-04-06
    • 1970-01-01
    • 2014-10-10
    • 1970-01-01
    相关资源
    最近更新 更多