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感觉不那么“拥挤”。