Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用BorderLayout缩小文本字段并将标签放置在右下角?_Java_Swing_Layout Manager_Border Layout - Fatal编程技术网

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

Java 如何使用BorderLayout缩小文本字段并将标签放置在右下角?,java,swing,layout-manager,border-layout,Java,Swing,Layout Manager,Border Layout,我被告知在这个项目中使用BorderLayout。我不确定如何正确调整文本字段的大小,也不确定如何将JLabelanswercelics放在右下角 我试图用代码更改文本字段-farenheit.setPreferredSize((新维度(80,20)) 这似乎没什么用 使用BorderLayout是否允许您与东南方向的网格对齐?还是只有5个独立的网格 import javax.swing.*; import javax.swing.border.Border; import java.awt.*

我被告知在这个项目中使用
BorderLayout
。我不确定如何正确调整文本字段的大小,也不确定如何将
JLabel
answercelics
放在右下角

我试图用代码更改文本字段-
farenheit.setPreferredSize((新维度(80,20))
这似乎没什么用

使用
BorderLayout
是否允许您与
东南方向的网格对齐?还是只有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();

        }
    });
}
}
我被告知在这个项目中使用BorderLayout。我不知道该怎么做 正确调整文本字段的大小,但我不确定如何放置JLabel 回答进入右下角

下面是一种将
应答器
JLabel
定位到窗口右下角(东南方向)的方法。这是使用
BorderLayout
中的
javax.swing.Box
完成的。以下是我用来完成此任务的代码:

选项1

我替换了这一行:

使用此代码:

以下屏幕截图显示了代码更改前后的情况:


注意:在应用程序中,需要根据需要调整填充以实现此目的


选项2

替换此代码:

使用此代码:

结果是:


根据文档,您只有五个职位。您应该避免使用
setPreferredSize
,因为这会以令人不快的方式破坏UI。您可以使用的最佳解决方案是使用另一个具有不同布局的容器来实现您想要的。我使用网格布局构建了它,并且它可以与空白标签一起工作,但不幸的是,我的老师限制了我使用BorderLayout。我真的不知道该交什么。哈哈。是的,这是一种奇怪的要求。你可以尝试使用多个JPanel,每个JPanel都有一个边框布局,然后将它们放在主面板中。同意@MadProgrammer对表单的奇怪要求。“我不确定如何正确调整文本字段的大小。
farenheit=new JTextField(“Input”);
”要建议大小,请设置字段要显示的列数/字符数。“我不知道如何将JLabel应答器放在右下角。”如果限制为
BorderLayout
,我会使用两个。带有边框布局的面板,其标签位于
东部
,其本身位于
南部
的另一个带有边框布局的面板中。。
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);
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);