JLabel未在框架或面板上显示

时间:2016-05-15 16:19:43

标签: java jlabel

我正在制作一个计算器作为Java类的最终版本,我遇到了一个停止该项目所有进展的问题。我有一个面板上的所有按钮并放在一个框架上,但由于某种原因,我似乎无法得到一个JLabel输入的数字出现在框架上。我知道我可能会遗漏一些愚蠢的东西,但是会感激不尽。

包装类:

import javax.swing.*;
import java.awt.*;

public class CalculatorFrame
{
public static void main (String[] args)
{

    JFrame frame = new JFrame ("Calculator");
    JPanel primary = new JPanel();
    JPanel numPad = new JPanel();
    JPanel textPanel = new JPanel();

    frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);

    textPanel.add(new NumberText());

    //Grid layout for buttons
    numPad.setLayout(new GridLayout(4, 3));

    //Number Buttons
    numPad.add(new Button1());
    numPad.add(new Button2());
    numPad.add(new Button3());
    numPad.add(new Button4());
    numPad.add(new Button5());
    numPad.add(new Button6());
    numPad.add(new Button7());
    numPad.add(new Button8());
    numPad.add(new Button9());
    numPad.add(new ButtonNeg());
    numPad.add(new Button0());
    numPad.add(new ButtonDec());

    primary.add(textPanel,BorderLayout.NORTH);
    primary.add(numPad, BorderLayout.SOUTH);

    frame.getContentPane().add(primary);
    frame.pack();
    frame.setVisible(true);
}
}

JLabel班级:

import javax.swing.*;

public class NumberText extends JLabel
{
private JLabel opNumLabel;
private String opNum;
private double storeNum = 0;
private boolean firstOp = true;

public void NumberText()
{
    opNum = "ur mom lol";
    opNumLabel = new JLabel (" " + opNum);
}

2 个答案:

答案 0 :(得分:1)

你的代码中实际上有两个 JLable,一个是NumberText类扩展的,你没有添加任何文本,并且你正在添加到GUI,一个持有 与您添加文本的同一个类,但您没有添加到GUI。

解决方案:不要创建一个类来覆盖JLabel - 如果你没有扩展它的行为就没有必要这样做。而只需使用一个JLabel。

其他问题:

  • 您将希望从主要方法中获取大部分代码,并将其放入适当的类中。
  • 使用数组或ArrayLists简化编码,从而简化调试。
  • 你真的每个按钮都有一个新班级吗?这是你真正不想要的调试和维护噩梦。而是希望使用JButton并更改其文本和侦听器。
  • 这一切都表明你过度使用了继承,而在大多数情况下你会想要使用组合。

答案 1 :(得分:0)

您扩展了JLabel,但您没有使用实例本身,而是创建了另一个$v = Validator::make($data, [ 'per_type_id' => 'required|email' ]); $v->sometimes('perTypeTime', 'required|max:500', function($input) { return $input->per_type_id == 1; }); 并使用它。试试这个:

JLabel opNumLabel

此外,您可能需要考虑是否确实需要此public class NumberText extends JLabel { private String opNum; private double storeNum = 0; private boolean firstOp = true; public void NumberText() { super(); opNum = "ur mom lol"; this.setText(opNum); } } ,而不是使用普通NumberText