java - JTextField 无法正确显示
java - JTextField wont show properly
我正在做一个小型 java 项目,最终目标是一个程序,告诉您指定月份有多少天。我的问题是我的文本字段中只有一个出现在 GUI 中!我不知道为什么会这样,并且一直在寻找解决方案大约 2 个小时。请帮忙! p.s。我是一名新手程序员,至少在 java 所以这可能是一个显而易见的答案!
我的代码:
package main;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
@SuppressWarnings({ "unused", "serial" })
public class Test extends JFrame {
JTextField text;
JTextField text2 = new JTextField("Enter Year", 40);
JPanel panel = new JPanel();
JLabel label1;
String Input1;
String Input2;
int month;
int year;
int numDays = 0;
public Test() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
text = new JTextField("Enter month's #", 40);
text2.addActionListener(new MyActionListener());
panel.setPreferredSize(new Dimension(400,800));
getContentPane().add(panel);
getContentPane().add(text, "Center");
getContentPane().add(text2, "Center");
pack();
}
public static void main(String[] args) {
new Test().setVisible(true);
}
class MyActionListener implements ActionListener {
public void actionPerformed(ActionEvent evt) {
Input1 = text.getText();
Input2 = text2.getText();
month = Integer.parseInt(Input1);
year = Integer.parseInt(Input2);
math(month, year);
}
}
public void math(int month, int year){
switch (month) {
case 1: case 3: case 5:
case 7: case 8: case 10:
case 12:
numDays = 31;
break;
case 4: case 6:
case 9: case 11:
numDays = 30;
break;
case 2:
if (((year % 4 == 0) &&
!(year % 100 == 0))
|| (year % 400 == 0))
numDays = 29;
else
numDays = 28;
break;
default:
label1 = new JLabel("Invalid input...");
getContentPane().add(label1, JLabel.BOTTOM);
break;
}
label1 = new JLabel(Integer.toString(numDays));
getContentPane().add(label1, JLabel.BOTTOM);
}
}
我确定这可能是我只是简单地看了看,我希望他们是一个简单的解决方案!提前致谢!
两个文本字段都位于中间位置。也许您想将它们添加到面板中。改变这个:
getContentPane().add(panel);
panel.setLayout(new BorderLayout());
panel.add(text, BorderLayout.CENTER);
panel.add(text2, BorderLayout.SOUTH);
先看看 Laying Out Components Within a Container and How to Use BorderLayout
JFrame
默认使用 BorderLayout
,它只管理 5 个可用位置中的每一个的单个组件,在这种情况下,只管理您添加的最后一个组件
根据您想要实现的目标来确定您可能使用的布局管理器。
例如,您可以使用 GridBagLayout
import java.awt.EventQueue;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
public class Test {
public static void main(String[] args) {
new Test();
}
public Test() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
ex.printStackTrace();
}
JFrame frame = new JFrame("Testing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new TestPane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public class TestPane extends JPanel {
JTextField text;
JTextField text2 = new JTextField("Enter Year", 40);
JLabel label1;
String Input1;
String Input2;
int month;
int year;
int numDays = 0;
public TestPane() {
setLayout(new GridBagLayout());
text = new JTextField("Enter month's #", 40);
text2.addActionListener(new MyActionListener());
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridwidth = GridBagConstraints.REMAINDER;
add(text, gbc);
add(text2, gbc);
}
class MyActionListener implements ActionListener {
public void actionPerformed(ActionEvent evt) {
Input1 = text.getText();
Input2 = text2.getText();
month = Integer.parseInt(Input1);
year = Integer.parseInt(Input2);
math(month, year);
}
}
public void math(int month, int year) {
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridwidth = GridBagConstraints.REMAINDER;
switch (month) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
numDays = 31;
break;
case 4:
case 6:
case 9:
case 11:
numDays = 30;
break;
case 2:
if (((year % 4 == 0)
&& !(year % 100 == 0))
|| (year % 400 == 0)) {
numDays = 29;
} else {
numDays = 28;
}
break;
default:
label1 = new JLabel("Invalid input...");
add(label1, gbc);
break;
}
label1 = new JLabel(Integer.toString(numDays));
add(label1, gbc);
}
}
}
有关详细信息,请参阅 How to Use GridBagLayout。
不过,通常情况下,您会使用多个布局管理器,将您的 UI 隔离为可工作的单元,重点关注每个部分在其自己的容器中的个别需求,然后通过使用其他布局管理器将它们组合起来布局管理器
我正在做一个小型 java 项目,最终目标是一个程序,告诉您指定月份有多少天。我的问题是我的文本字段中只有一个出现在 GUI 中!我不知道为什么会这样,并且一直在寻找解决方案大约 2 个小时。请帮忙! p.s。我是一名新手程序员,至少在 java 所以这可能是一个显而易见的答案!
我的代码:
package main;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
@SuppressWarnings({ "unused", "serial" })
public class Test extends JFrame {
JTextField text;
JTextField text2 = new JTextField("Enter Year", 40);
JPanel panel = new JPanel();
JLabel label1;
String Input1;
String Input2;
int month;
int year;
int numDays = 0;
public Test() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
text = new JTextField("Enter month's #", 40);
text2.addActionListener(new MyActionListener());
panel.setPreferredSize(new Dimension(400,800));
getContentPane().add(panel);
getContentPane().add(text, "Center");
getContentPane().add(text2, "Center");
pack();
}
public static void main(String[] args) {
new Test().setVisible(true);
}
class MyActionListener implements ActionListener {
public void actionPerformed(ActionEvent evt) {
Input1 = text.getText();
Input2 = text2.getText();
month = Integer.parseInt(Input1);
year = Integer.parseInt(Input2);
math(month, year);
}
}
public void math(int month, int year){
switch (month) {
case 1: case 3: case 5:
case 7: case 8: case 10:
case 12:
numDays = 31;
break;
case 4: case 6:
case 9: case 11:
numDays = 30;
break;
case 2:
if (((year % 4 == 0) &&
!(year % 100 == 0))
|| (year % 400 == 0))
numDays = 29;
else
numDays = 28;
break;
default:
label1 = new JLabel("Invalid input...");
getContentPane().add(label1, JLabel.BOTTOM);
break;
}
label1 = new JLabel(Integer.toString(numDays));
getContentPane().add(label1, JLabel.BOTTOM);
}
}
我确定这可能是我只是简单地看了看,我希望他们是一个简单的解决方案!提前致谢!
两个文本字段都位于中间位置。也许您想将它们添加到面板中。改变这个:
getContentPane().add(panel);
panel.setLayout(new BorderLayout());
panel.add(text, BorderLayout.CENTER);
panel.add(text2, BorderLayout.SOUTH);
先看看 Laying Out Components Within a Container and How to Use BorderLayout
JFrame
默认使用 BorderLayout
,它只管理 5 个可用位置中的每一个的单个组件,在这种情况下,只管理您添加的最后一个组件
根据您想要实现的目标来确定您可能使用的布局管理器。
例如,您可以使用 GridBagLayout
import java.awt.EventQueue;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
public class Test {
public static void main(String[] args) {
new Test();
}
public Test() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
ex.printStackTrace();
}
JFrame frame = new JFrame("Testing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new TestPane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public class TestPane extends JPanel {
JTextField text;
JTextField text2 = new JTextField("Enter Year", 40);
JLabel label1;
String Input1;
String Input2;
int month;
int year;
int numDays = 0;
public TestPane() {
setLayout(new GridBagLayout());
text = new JTextField("Enter month's #", 40);
text2.addActionListener(new MyActionListener());
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridwidth = GridBagConstraints.REMAINDER;
add(text, gbc);
add(text2, gbc);
}
class MyActionListener implements ActionListener {
public void actionPerformed(ActionEvent evt) {
Input1 = text.getText();
Input2 = text2.getText();
month = Integer.parseInt(Input1);
year = Integer.parseInt(Input2);
math(month, year);
}
}
public void math(int month, int year) {
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridwidth = GridBagConstraints.REMAINDER;
switch (month) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
numDays = 31;
break;
case 4:
case 6:
case 9:
case 11:
numDays = 30;
break;
case 2:
if (((year % 4 == 0)
&& !(year % 100 == 0))
|| (year % 400 == 0)) {
numDays = 29;
} else {
numDays = 28;
}
break;
default:
label1 = new JLabel("Invalid input...");
add(label1, gbc);
break;
}
label1 = new JLabel(Integer.toString(numDays));
add(label1, gbc);
}
}
}
有关详细信息,请参阅 How to Use GridBagLayout。
不过,通常情况下,您会使用多个布局管理器,将您的 UI 隔离为可工作的单元,重点关注每个部分在其自己的容器中的个别需求,然后通过使用其他布局管理器将它们组合起来布局管理器