我想制作一个你必须输入你的名字和东西的框架。我试着把它命名为: textfield ,下一行,年龄: textfield 等等......但是文本域非常高。如果我在框架的一个面板中添加2个文本字段,则一个文本字段包含我的屏幕的一半。我尝试用布局管理器解决这个问题,但我不知道如何。
有人可以帮助我吗?
这是我的代码:
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
class GUI{
public static void main(String [] args){
GUI g = new GUI();
g.Start();
}
public void Start(){
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);
frame.setSize(640, 640);
JPanel panel = new JPanel();
JPanel west = new JPanel();
JLabel name = new JLabel("Name: ");
JLabel age = new JLabel("Age: ");
JTextField field1 = new JTextField();
JTextField field2 = new JTextField();
west.setLayout(new BoxLayout(west, BoxLayout.Y_AXIS));
west.add(name);
west.add(age);
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
panel.add(field1);
panel.add(field2);
frame.getContentPane().add(BorderLayout.CENTER, panel);
frame.getContentPane().add(BorderLayout.WEST, west);
frame.setVisible(true);
}
}
答案 0 :(得分:4)
BoxLayout
和BorderLayout
的组合对您不利,请考虑使用GridBagLayout
之类的内容。
有关详细信息,请查看How to Use GridBagLayout
import java.awt.EventQueue;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
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 LayoutTest {
public static void main(String[] args) {
new LayoutTest();
}
public LayoutTest() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
ex.printStackTrace();
}
JPanel form = new JPanel(new GridBagLayout());
JLabel name = new JLabel("Name: ");
JLabel age = new JLabel("Age: ");
JTextField field1 = new JTextField(10);
JTextField field2 = new JTextField(3);
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridx = 0;
gbc.gridy = 0;
gbc.anchor = GridBagConstraints.WEST;
form.add(name, gbc);
gbc.gridy++;
form.add(age, gbc);
gbc.gridx++;
gbc.gridy = 0;
form.add(field1, gbc);
gbc.gridy++;
form.add(field2, gbc);
JFrame frame = new JFrame("Testing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(form);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
}
答案 1 :(得分:-1)
不确定您正在使用哪个IDE,但我确实知道,使用Eclipse,WindowBuilder Pro可以帮助您解决这个问题。
你要找的是setBounds(x,y,width,height)。在GUI的对象上使用它。
x,y是相对于我们正在工作的窗口的对象原点(0,0)的坐标。原点也位于窗口的左上角,离你越远它在x / y方向上,数量增加。与学校的典型图表略有不同。
这是我的一个GUI的一段代码,作为一个例子。
final TextField textField_1 = new TextField();
textField_1.setBounds(10, 231, 370, 22);
panel.add(textField_1);