有人告诉我为此项目使用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();
}
});
}
}
答案 0 :(得分:1)
我被告知要为该项目使用BorderLayout。我不确定如何 正确调整我的文本字段的大小,我不确定如何放置JLabel 将摄氏温度插入右下角。
这是将answerCelsius
JLabel
放置在窗口右下角(东南)的一种方法。这是通过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);
结果: