在 Java Swing 中与 BoxLayout 斗争
Struggling with BoxLayout in Java Swing
伙计们,怎么了我正在努力了解如何在 java swing 中实现 BoxLayout 或任何布局。我一直在看关于 Oracle 和其他教程的教程,但我就是无法让它工作。这是大学的作业,所以我很感激不直接给我解决方案,但也许只是指出正确的方向。我认为问题是我的代码与教程中的代码不同,所以我不确定在哪里。
import javax.swing.*;
import java.awt.event.*;
import java.util.Random;
import javax.swing.BoxLayout;
class Window extends JFrame implements ActionListener
{
JPanel panel = new JPanel();
JTextField input = new JTextField(10);
JButton but1 = new JButton ("Convert");
JLabel label = new JLabel();
JTextArea output = new JTextArea(1, 20);
public static void main(String[] args)
{
Window gui = new Window();
String[] days = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday"};
}
public Window()
{
super("Swing Window");
setSize(500, 200);
setDefaultCloseOperation(EXIT_ON_CLOSE);
panel.add(input);
but1.addActionListener(this);
add(panel);
panel.add(output);
label.setText ("please enter celsius to be converted to Fahrenheit");
panel.add(but1);
panel.add(label);
setVisible(true);
}
public void actionPerformed(ActionEvent event)
{
String inputStr = input.getText();
inputStr = inputStr.trim();
double input = Double.parseDouble(inputStr);
double fahrenheit = input * 1.8 + 32;
if (event.getSource() == but1)
{
output.setText("Here is degrees celsius " + input + " converted `to Fahrenheit: " + fahrenheit);`
}
}
}
有可执行代码。
我浏览了你的代码,但没有执行它。正如评论中已经提到的其他人一样,描述程序的作用以及描述您 expect/want 它要做什么对您很有帮助。否则我们只是在猜测什么是错误的,什么是正确的。
根据我对您代码的阅读,我认为您没有看到任何显示。 更正:您确实调用了 add()
;如您最近的评论之一所示 这里有一些 notes/explanations:
- 您的方法
addComponentsToPane()
从未被调用,因此您永远不会创建任何 BoxLayout
对象
- 建议:变量名以小写开头,不要和class重名;阅读代码时很容易造成混淆。因此不要将参数命名为
Window
.
- 您的方法
addComponentsToPane()
,如果被调用,会创建一个 Layout 对象并将其设置在传递给它的组件上,但实际上并不添加任何组件。因此这个名字具有误导性。
- JFrame 的内容窗格有一个
BorderLayout
by default. When components are added without any additional constraints, the BorderLayout chooses to place the components in a certain order (starting with BorderLayout.CENTER
). See documentation of the JFrame class,其中表示默认值为 BorderLayout。
- 默认为
JPanel
, when created with the default constructor has a FlowLayout
。
- 由于您的程序从未更改面板的布局管理器,这就是您观察到的 left-to-right 流程的原因。
- 您想在向其添加组件之前将面板的布局设置为垂直 BoxLayout
伙计们,怎么了我正在努力了解如何在 java swing 中实现 BoxLayout 或任何布局。我一直在看关于 Oracle 和其他教程的教程,但我就是无法让它工作。这是大学的作业,所以我很感激不直接给我解决方案,但也许只是指出正确的方向。我认为问题是我的代码与教程中的代码不同,所以我不确定在哪里。
import javax.swing.*;
import java.awt.event.*;
import java.util.Random;
import javax.swing.BoxLayout;
class Window extends JFrame implements ActionListener
{
JPanel panel = new JPanel();
JTextField input = new JTextField(10);
JButton but1 = new JButton ("Convert");
JLabel label = new JLabel();
JTextArea output = new JTextArea(1, 20);
public static void main(String[] args)
{
Window gui = new Window();
String[] days = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday"};
}
public Window()
{
super("Swing Window");
setSize(500, 200);
setDefaultCloseOperation(EXIT_ON_CLOSE);
panel.add(input);
but1.addActionListener(this);
add(panel);
panel.add(output);
label.setText ("please enter celsius to be converted to Fahrenheit");
panel.add(but1);
panel.add(label);
setVisible(true);
}
public void actionPerformed(ActionEvent event)
{
String inputStr = input.getText();
inputStr = inputStr.trim();
double input = Double.parseDouble(inputStr);
double fahrenheit = input * 1.8 + 32;
if (event.getSource() == but1)
{
output.setText("Here is degrees celsius " + input + " converted `to Fahrenheit: " + fahrenheit);`
}
}
}
有可执行代码。
我浏览了你的代码,但没有执行它。正如评论中已经提到的其他人一样,描述程序的作用以及描述您 expect/want 它要做什么对您很有帮助。否则我们只是在猜测什么是错误的,什么是正确的。
根据我对您代码的阅读,我认为您没有看到任何显示。 更正:您确实调用了 add()
;如您最近的评论之一所示 这里有一些 notes/explanations:
- 您的方法
addComponentsToPane()
从未被调用,因此您永远不会创建任何BoxLayout
对象 - 建议:变量名以小写开头,不要和class重名;阅读代码时很容易造成混淆。因此不要将参数命名为
Window
. - 您的方法
addComponentsToPane()
,如果被调用,会创建一个 Layout 对象并将其设置在传递给它的组件上,但实际上并不添加任何组件。因此这个名字具有误导性。 - JFrame 的内容窗格有一个
BorderLayout
by default. When components are added without any additional constraints, the BorderLayout chooses to place the components in a certain order (starting withBorderLayout.CENTER
). See documentation of the JFrame class,其中表示默认值为 BorderLayout。 - 默认为
JPanel
, when created with the default constructor has aFlowLayout
。 - 由于您的程序从未更改面板的布局管理器,这就是您观察到的 left-to-right 流程的原因。
- 您想在向其添加组件之前将面板的布局设置为垂直 BoxLayout