JTextField最初只显示,只有点击它?

时间:2014-05-22 18:28:07

标签: java swing jtextfield

所以这个问题确实让我头疼,因为昨晚我工作时出于某种原因,我的代码运行完美,我的文本字段会显示没有问题......

上床睡觉,醒来,再次上班aaaaa和bam。现在我的JtextFields只在我突出显示它们或点击它们时出现......我想知道可能出现什么问题?

我的代码在这一点上真的只是凌乱和蹩脚,而我想出了一个更好的方法来设计我的程序......

我认为这只是日食,但netbeans给了我同样的问题。

import java.util.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;
import java.awt.*;
import javax.swing.border.*;


public class DiffuserCalc {
    //create the class data fields
    private double Qts;
    private double Qes;
    private double Vas;
    JFrame ProgramBounds = new JFrame();
    JLabel label1= new JLabel("Qts");
    JLabel label2= new JLabel("Qes");
    JLabel label3= new JLabel("Fs");
    JLabel label4= new JLabel("BL");
    JLabel label5= new JLabel("Xmax");
    JLabel label6= new JLabel("Fs");
    JLabel label7= new JLabel("Vas");
    JLabel label8= new JLabel("Diameter");
    JLabel label9= new JLabel("Pmax (RMS)"); 
    JTextField QtsParam = new JTextField("Value");
    JTextField QesParam = new JTextField("Value");
    JTextField FsParam = new JTextField("   ");
    JTextField BLParam = new JTextField("   ");
    JTextField XmaxParam = new JTextField("   ");

    Font myFont = new Font("Tahoma", Font.BOLD, 20);

    DiffuserCalc()
    {
        ProgramBounds.setTitle("Box Designer");
        JPanel ParameterMenu = new JPanel();
        JPanel FieldInputs = new JPanel();


        ParameterMenu.setBounds(30, 0, 1180, 120);
        FieldInputs.setBounds(0,0, 1280, 720);
        ProgramBounds.add(ParameterMenu);
        ProgramBounds.add(FieldInputs);
        ProgramBounds.setSize(1280,720);



        // LAYOUT

        ParameterMenu.setLayout(new FlowLayout(FlowLayout.CENTER, 60, 10));

        FieldInputs.setLayout(null);

        Border lineBdr = BorderFactory.createLineBorder(Color.BLACK);
        Border BlackBorder = BorderFactory.createTitledBorder(lineBdr, "    T/S Parameters    ", TitledBorder.CENTER, TitledBorder.TOP, myFont, Color.black);

        //FIELD PROPERTIES

        label1.setFont(myFont);
        label2.setFont(myFont);
        label3.setFont(myFont);
        label4.setFont(myFont);
        label5.setFont(myFont);
        label6.setFont(myFont);
        label7.setFont(myFont);
        label8.setFont(myFont);
        label9.setFont(myFont);

        // PARAMETER BOUNDS
        int XLoc = 150;
        int YLoc = 70;
        QtsParam.setBounds(XLoc, YLoc, 40, 20);
        QesParam.setBounds(XLoc+95, YLoc, 40, 20);
        FsParam.setBounds(XLoc+190, YLoc, 40, 20);



        // ADD FIELDS
        ParameterMenu.add(label1);
        ParameterMenu.add(label2);
        ParameterMenu.add(label3);
        ParameterMenu.add(label4);
        ParameterMenu.add(label5);
        ParameterMenu.add(label6);
        ParameterMenu.add(label7);
        ParameterMenu.add(label8);
        ParameterMenu.add(label9);

        ParameterMenu.setBorder(BlackBorder);

        FieldInputs.add(QtsParam);
        FieldInputs.add(QesParam);
        FieldInputs.add(FsParam);
        FieldInputs.add(BLParam);
        FieldInputs.add(XmaxParam);




        // set everything proper
        QtsParam.requestFocus();
        ParameterMenu.setVisible(true);
        FieldInputs.setVisible(true);
        ProgramBounds.setVisible(true);
    }
    public double BoxDimension(int x, int y)
    {
        return x;
    }
    public static void main(String[] args) {

        DiffuserCalc MainProgram = new DiffuserCalc();


    }

}

2 个答案:

答案 0 :(得分:1)

您的代码仅设置3个文本字段的边界,但您向面板添加了5个文本字段。

不要使用空布局!!!

使用合适的布局管理器,然后您不必担心会犯这样的错误。

另外,请遵循Java命名约定。变量名不以大写字符开头。

答案 1 :(得分:0)

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.ComponentOrientation;
import java.awt.FlowLayout;
import java.awt.Font;

import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.border.Border;
import javax.swing.border.TitledBorder;


public class DiffuserCalc {
    //create the class data fields
    private double qts;
    private double qes;
    private double vas;
    private JFrame programBounds = new JFrame();
    private JLabel label1= new JLabel("Qts");
    private JLabel label2= new JLabel("Qes");
    private JLabel label3= new JLabel("Fs");
    private JLabel label4= new JLabel("BL");
    private JLabel label5= new JLabel("Xmax");
    private JLabel label6= new JLabel("Fs");
    private JLabel label7= new JLabel("Vas");
    private JLabel label8= new JLabel("Diameter");
    private JLabel label9= new JLabel("Pmax (RMS)"); 
    private JTextField qtsParam = new JTextField("Value");
    private JTextField qesParam = new JTextField("Value");
    private JTextField fsParam = new JTextField("");
    private JTextField bLParam = new JTextField("");
    private JTextField xmaxParam = new JTextField("");

    private Font myFont = new Font("Tahoma", Font.BOLD, 20);

    DiffuserCalc()
    {
        programBounds.setTitle("Box Designer");
        JPanel parameterMenu = new JPanel();
        JPanel labelPanel = new JPanel();
        JPanel fieldInputs = new JPanel();

        // LAYOUT
        programBounds.setLayout(new BorderLayout());
        parameterMenu.setLayout(new BorderLayout());
        fieldInputs.setLayout(new FlowLayout(FlowLayout.LEFT));
        fieldInputs.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
        labelPanel.setLayout(new FlowLayout(FlowLayout.LEFT));
        labelPanel.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);


        programBounds.add(parameterMenu, BorderLayout.NORTH);
        parameterMenu.add(labelPanel, BorderLayout.NORTH);
        parameterMenu.add(fieldInputs, BorderLayout.SOUTH);
//        programBounds.add(fieldInputs);
        programBounds.setSize(1280,720);

        Border lineBdr = BorderFactory.createLineBorder(Color.BLACK);
        Border BlackBorder = BorderFactory.createTitledBorder(lineBdr, "    T/S Parameters    ", TitledBorder.CENTER, TitledBorder.TOP, myFont, Color.black);

        //FIELD PROPERTIES
        label1.setFont(myFont);
        label2.setFont(myFont);
        label3.setFont(myFont);
        label4.setFont(myFont);
        label5.setFont(myFont);
        label6.setFont(myFont);
        label7.setFont(myFont);
        label8.setFont(myFont);
        label9.setFont(myFont);

        // ADD FIELDS
        labelPanel.add(label1);
        labelPanel.add(label2);
        labelPanel.add(label3);
        labelPanel.add(label4);
        labelPanel.add(label5);
        labelPanel.add(label6);
        labelPanel.add(label7);
        labelPanel.add(label8);
        labelPanel.add(label9);

        parameterMenu.setBorder(BlackBorder);

        qtsParam.setColumns(3);
        fieldInputs.add(qtsParam);
        qesParam.setColumns(3);
        fieldInputs.add(qesParam);
        fsParam.setColumns(2);
        fieldInputs.add(fsParam);
        bLParam.setColumns(2);
        fieldInputs.add(bLParam);
        xmaxParam.setColumns(2);
        fieldInputs.add(xmaxParam);

        // set everything proper
        qtsParam.requestFocus();
        programBounds.pack();
        programBounds.setVisible(true);
    }
    public double BoxDimension(int x, int y)
    {
        return x;
    }
    public static void main(String[] args) {

        DiffuserCalc MainProgram = new DiffuserCalc();


    }
}

所以我根据Java style standard为你重新编写了类。接下来不使用布局管理器就是在寻找麻烦。即使你的要求就像你说的那样,当你继续遇到像这样的问题时,最好还是努力使用布局管理器。阅读有关布局管理器here的更多信息。此外,不要在添加到帧中的JPanel上调用setVisible。当你在JFrame上调用setVisible时,它将在所有子组件上调用setVisible。

接下来调用JTextField上的方法setColumns,而不是使用空格初始化它,以获得更一致和可预测的行为。