我被告知使用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();
}
});
}
}
我被告知要为这个项目使用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);
以下屏幕截图显示了代码更改之前和之后:
注意:在应用程序中,需要根据要求调整填充以完成此操作。
选项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);
结果: