Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在JFrame窗口中定位JButton?_Java_Swing_Jframe_Jbutton_Layout Manager - Fatal编程技术网

Java 如何在JFrame窗口中定位JButton?

Java 如何在JFrame窗口中定位JButton?,java,swing,jframe,jbutton,layout-manager,Java,Swing,Jframe,Jbutton,Layout Manager,我的节目是关于一家超市的。我想将JButton'b1'定位在JLabel'l1'正下方以及JTextField'jt1'下方。我希望JButton'b1'也在中间,但在'l1'和'jt1'下面。下面是我的程序的delivery()方法: public static void delivery() { final JFrame f1 = new JFrame("Name"); f1.setVisible(true); f1.setSize(600,200); f1.

我的节目是关于一家超市的。我想将
JButton
'b1'定位在
JLabel
'l1'正下方以及
JTextField
'jt1'下方。我希望
JButton
'b1'也在中间,但在'l1'和'jt1'下面。下面是我的程序的
delivery()
方法:

public static void delivery()
{
    final JFrame f1 = new JFrame("Name");
    f1.setVisible(true);
    f1.setSize(600,200);
    f1.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    f1.setLocation(700,450);

    JPanel p1 = new JPanel();

    final JLabel l1 = new JLabel("Enter your name: ");

    final JTextField jt1 = new JTextField(20);

    JButton b1 = new JButton("Ok");
    b1.addActionListener(new ActionListener()
    {
        public void actionPerformed(ActionEvent e)
        {
            input1 = jt1.getText();
            f1.setVisible(false);
        }
    });

    p1.add(b1);
    p1.add(l1);
    p1.add(jt1);
    f1.add(p1);


    final JFrame f2 = new JFrame("Address");
    f2.setVisible(true);
    f2.setSize(600,200);
    f2.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    f2.setLocation(700,450);

    JPanel p2 = new JPanel();

    final JLabel l2 = new JLabel("Enter your address: ");

    final JTextField jt2 = new JTextField(20);

    JButton b2 = new JButton("Ok");
    b2.addActionListener(new ActionListener()
    {
        public void actionPerformed(ActionEvent e)
        {
            input2 = jt2.getText();
            f2.setVisible(false);
        }
    });

    p2.add(b2);
    p2.add(l2);
    p2.add(jt2);
    f2.add(p2);

    }
}

您可以使用多个JPanel来接近您想要的内容:

import java.io.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

class MyGui {

    public static void delivery()
    {
        JFrame f1 = new JFrame("Name");
        f1.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        f1.setBounds(200, 100, 500, 300);
        Container cpane = f1.getContentPane();

        JPanel p1 = new JPanel();
        p1.setLayout(new BoxLayout(p1, BoxLayout.LINE_AXIS));  //Horizontal

        JLabel l1 = new JLabel("Enter your name: ");
        JTextField jt1 = new JTextField(20);
        jt1.setMaximumSize( jt1.getPreferredSize() );

        p1.add(l1);
        p1.add(jt1);

        JPanel p2 = new JPanel(); 
        p2.setLayout(new BoxLayout(p2, BoxLayout.PAGE_AXIS)); //Vertical

        p2.add(p1);

        JButton b1 = new JButton("Ok");
        p2.add(b1);
        cpane.add(p2);

        f1.setVisible(true);

    }
}



public class SwingProg {
    private static void createAndShowGUI() {
        MyGui.delivery();
    }

    public static void main(String[] args) {
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                createAndShowGUI();
            }
        });
    }
}

使用GridBagLayout类。这是为了使用约束进行自定义设计。

请停止浪费时间,按照您以前的帖子中的建议进行。阅读你的编码方式太糟糕了,对一个应用程序使用多个
JFrame
,编写
JFrame.setVisible(boolean)
远远早于
JFrame
的大小,使用邪恶的硬编码位置参数(谁知道,这些参数会在隔壁的计算机上工作呢),无故使用过多的静态块。在你开始努力之前,你最好停止工作,开始阅读基础知识:-)你是不是被迫做一些你不想做的事情?我希望你没有跳到10年级,你一定是从一年级开始走了很长的路(我真的希望你明白为什么走这么长的路)。就像我之前说过的,如果这不是你感兴趣的地方,那就不要浪费时间,把注意力集中在其他问题上。2年是学习一些东西的很长时间,或者至少是正确掌握基本知识的很长时间。
我没有时间
然后使用一个基本布局管理器,不要对组件的最终位置过于挑剔。例如,使用BoxLayout将标签、文本字段和按钮放在同一行上。那么努力工作呢?你认为通过让我们为你解决每一个问题,你会学会编程吗?这个问题似乎离题了,因为它是关于一件“紧急”的事情。太本地化了。
f1.setBounds(200100500300)最好调用
f1.pack()紧接在
f1.setVisible之前(true)+1在任何情况下。:)是的,我知道。但是,pack()总是使gui太小,因此,在调用pack()和setBounds()之前,setBounds()可以很好地工作,然后花2个小时试图找出为什么setBounds()不会更改窗口的大小(尝试添加一些布局填充和
EmptBorder
。这通常会让GUI感觉不那么“拥挤”。