Java swing中部件的尺寸和位置有问题

Java swing中部件的尺寸和位置有问题,java,swing,user-interface,Java,Swing,User Interface,我正在制作一个简单的JavaSwing程序,但是我在组件的大小和位置上遇到了问题。我有三个jlabel和三个jtextfield。jLabel重叠,因此仅显示我添加的最后一个。文本字段显示得非常小(几乎像一行)。此外,所有内容都显示在一行上,我希望每个组件都显示在自己的行上 代码: 编辑:虽然我有代码为某些项目设置边界,但它不起作用。默认情况下,JPanel使用FlowLayout,这会将每个组件排成一行 setBounds无效,因为面板由布局管理器控制,布局管理器自行决定如何最好地放置和调整组

我正在制作一个简单的JavaSwing程序,但是我在组件的大小和位置上遇到了问题。我有三个jlabel和三个jtextfield。jLabel重叠,因此仅显示我添加的最后一个。文本字段显示得非常小(几乎像一行)。此外,所有内容都显示在一行上,我希望每个组件都显示在自己的行上

代码:


编辑:虽然我有代码为某些项目设置边界,但它不起作用。

默认情况下,
JPanel
使用
FlowLayout
,这会将每个组件排成一行

setBounds
无效,因为面板由布局管理器控制,布局管理器自行决定如何最好地放置和调整组件的大小

尝试使用其他布局管理器


查看更多详细信息和想法

您需要使用布局管理器(布局管理器的可视指南)来组织组件

GridLayout的一个示例:

1) 在JFrame中配置GridLayout

// with 3 rows and 2 columns
static JPanel panel = new JPanel(new GridLayout(3, 2));
2) 按从左到右到下的顺序创建和添加元素

JLabel app1l = new JLabel("");
app1l.setText("Set  Application ONE name and path");
panel.add(app1l);

JTextField app1t = new JTextField();
panel.add(app1t);

// (...)
//keep adding your elements in order
3) 打包JFrame以组织添加的所有元素

frame3.pack(); 
  • 所有内容都显示在一行上,我希望每个组件都显示在一行上 自有品牌。
正如MadProgrammer所指出的,元素显示在一行中,因为您没有为
面板设置布局管理器。按照佩德罗·维托尔的建议,你可以使用。例如,对于单列布局,可以执行以下操作:

static JPanel panel = new JPanel (new GridLayout (0,1));
其中
0
表示无行,
1
表示列数

  • JLabel重叠
仔细看看你的代码。实际上,您一直只为
app1l
设置文本。其他标签在那里。只是他们没有文本。可能是复制和粘贴的产物;)

  • 实践说明
正如Pedro Vítor所提到的,您应该养成按顺序添加元素的习惯。当你回到代码时,它会帮你省去麻烦。此外,我建议您只有在添加了所有组件后才能显示框架。否则,不能保证渲染所有这些组件。看看这个问题:

因此,考虑到所有因素,您的代码应该如下所示:

import java.awt.GridLayout;
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;

public class setCustoms {
static JPanel panel = new JPanel(new GridLayout(0,1));
static JFrame frame2 = new JFrame("Settings");

public static void main (String[] args){
    JLabel app1l = new JLabel("");
    JLabel app2l = new JLabel("");
    JLabel app3l = new JLabel("");

    app1l.setText("Set  Application ONE name and path");
    panel.add(app1l);
    JTextField app1t = new JTextField();
    app1t.setBounds(100, 100, 100, 25);
    app1t.addActionListener(new Action());
    panel.add(app1t);

    app2l.setText("Set  Application TWO name and path");
    panel.add(app2l);
    JTextField app2t = new JTextField();
    app2t.addActionListener(new Action());
    panel.add(app2t);

    app3l.setText("Set  Application THREE name and path");
    panel.add(app3l);
    JTextField app3t = new JTextField();
    app3t.addActionListener(new Action());
    panel.add(app3t);

    frame2.add(panel);
    frame2.setBounds(500, 300, 500, 200);
    frame2.setVisible(true);   
}

static class Action implements ActionListener{
    public void actionPerformed (ActionEvent e){


    }
}

}

希望有帮助。

你能给我举一个对我有用的版面管理器的例子吗?
import java.awt.GridLayout;
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;

public class setCustoms {
static JPanel panel = new JPanel(new GridLayout(0,1));
static JFrame frame2 = new JFrame("Settings");

public static void main (String[] args){
    JLabel app1l = new JLabel("");
    JLabel app2l = new JLabel("");
    JLabel app3l = new JLabel("");

    app1l.setText("Set  Application ONE name and path");
    panel.add(app1l);
    JTextField app1t = new JTextField();
    app1t.setBounds(100, 100, 100, 25);
    app1t.addActionListener(new Action());
    panel.add(app1t);

    app2l.setText("Set  Application TWO name and path");
    panel.add(app2l);
    JTextField app2t = new JTextField();
    app2t.addActionListener(new Action());
    panel.add(app2t);

    app3l.setText("Set  Application THREE name and path");
    panel.add(app3l);
    JTextField app3t = new JTextField();
    app3t.addActionListener(new Action());
    panel.add(app3t);

    frame2.add(panel);
    frame2.setBounds(500, 300, 500, 200);
    frame2.setVisible(true);   
}

static class Action implements ActionListener{
    public void actionPerformed (ActionEvent e){


    }
}

}