如何使用BorderLayout缩小文本字段并在右下角放置标签?

问题描述 投票:-1回答:1

我被告知使用BorderLayout进行这个项目。我不确定如何正确调整文本字段的大小,我不知道如何将JLabel answerCelsius放入右下角。

我试图用代码更改文本字段 - farenheit.setPreferredSize((new Dimension(80,20)));这似乎没有做任何事情。

使用BorderLayout是否允许您与SouthEast网格对齐?或者只有5个独立的网格?

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

class JTemperature implements ActionListener {

    /** initialize the frame, labels, and textfield so I can use them in 
later methods
 */
private JTextField farenheit;
private JLabel name, enter, degreesFarenheit, answer, answerCelsius;
private JFrame jfrm;

JTemperature() {

    /** Makes a Jframe and titles it Temperature Converter
     */
    jfrm = new JFrame("Temperature Converter");

    /**
      set my borders and layout
     */
    jfrm.getContentPane().setLayout(new BorderLayout());

    /** sets size of Jframe
     */
    jfrm.setSize(240, 120);

    /** when the jframe closes it exits by default
     */
    jfrm.setDefaultCloseOperation(jfrm.EXIT_ON_CLOSE);

    /** initialize the label name
     */
    name = new JLabel("(c) First name, Last", JLabel.CENTER);


    /** initialize the label enter
     */
    enter = new JLabel("Enter: ", JLabel.CENTER);

    /** initialize the label answerCelsius
     */
    answerCelsius = new JLabel("degrees C", JLabel.CENTER);

    /** initialize the label degreesFarenheit
     */
    degreesFarenheit = new JLabel("degrees F", JLabel.CENTER);


    /** initialize farenheit jtextfield for user input
     * and align it center
     */
    farenheit = new JTextField("Input");


    /** add my labels to my grid
     */

    jfrm.add(name, BorderLayout.NORTH);
    jfrm.add(enter, BorderLayout.WEST);
    jfrm.add(farenheit, BorderLayout.CENTER);
    jfrm.add(degreesFarenheit, BorderLayout.EAST);
    jfrm.add(answerCelsius, BorderLayout.SOUTH);

    /** attach the action listener to farenheit
     */
    farenheit.addActionListener(this);

    /** makes the frame visible
     */
    jfrm.setVisible(true);

}

public void actionPerformed(ActionEvent ae) {

    /**
     * try and catch statement error on improper input
     * math for farenheit to celsius conversion
     * formatted string to round to hundreth place
     */
    try {

        double userInput = Double.parseDouble(farenheit.getText());
        double celsius = (userInput - 32) * 5 / 9;
        String roundedCelsius = String.format("%,.2f ", celsius);
        answerCelsius.setText("= "+roundedCelsius+" degrees C");



    } catch (NumberFormatException e) {
        answerCelsius.setText("Invalid Input");


    }
}


public static void main (String [] args){

    /**
     * run program
     */
    SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            new JTemperature();

        }
    });
}
}
java swing layout-manager border-layout
1个回答
1
投票

我被告知要为这个项目使用BorderLayout。我不确定如何正确调整文本字段的大小,我不知道如何将JLabel answerCelsius放入右下角。

这是一种将answerCelsius JLabel定位在窗口右下角(SouthEast)的方法。这是使用javax.swing.Box中的BorderLayout完成的。这是我用来完成这个的代码:

选项1:

我替换了这一行:

jfrm.add(answerCelsius, BorderLayout.SOUTH);

使用此代码:

Box hbox = Box.createHorizontalBox();
Component padding = Box.createHorizontalStrut(160);
hbox.add(padding);
hbox.add(answerCelsius);
jfrm.add(hbox, BorderLayout.SOUTH);

以下屏幕截图显示了代码更改之前和之后:

enter image description here

enter image description here

注意:在应用程序中,需要根据要求调整填充以完成此操作。

选项2:

替换此代码:

jfrm.add(degreesFarenheit, BorderLayout.EAST);
jfrm.add(answerCelsius, BorderLayout.SOUTH);

使用此代码:

Box vbox = Box.createVerticalBox();
Component padding = Box.createVerticalStrut(20);
vbox.add(padding);
vbox.add(degreesFarenheit);
vbox.add(padding);
vbox.add(answerCelsius);
jfrm.add(vbox, BorderLayout.EAST);

结果:

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.