2013-07-01 55 views
-2

我的程序是关于一家超市。我想将JButton'b1'定位在JLabel'l1'的下方,并且也低于JTextField'jt1'。我希望JButton'b1'也位于中心,但低于'l1'和'jt1'。下面是我的程序的delivery()方法:如何在JFrame窗口中定位JButton?

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); 

    } 
} 
+5

请停止浪费__TIME__,并按照以前的帖子中的建议进行操作。阅读[Java教程](http://docs.oracle.com/javase/tutorial/)。你编码的方式也是__BAD__,对于单个应用程序使用Multiple'JFrame',在使用恶意硬编码的位置参数实现'JFrame'的大小之前写'JFrame.setVisible(boolean)'(谁知道,将这些工作在隔壁的计算机上),无缘无故地使用过多的静态块。当你__ENDEAVOUR__ :-) –

+0

@nIcE cOw im juz 14,并且我学习了2年的Java并且我不是一个拥有计算机学位的人的时候,你__better__停止工作,并开始阅读基础知识。或类似的东西。我知道基本的东西。我现在没有时间阅读基础知识,因为我是10年级的学生,对我来说这是非常重要的一年。我也需要关注其他主题。我没有时间阅读厚厚的书籍,这就是为什么我通过YouTube学习。我需要的只是一点帮助 – siddhu99

+1

你是否被迫做出你不想要的东西?我希望你没有跳到10年级,你一定是从一年级开始走的漫长道路(我希望你明白为什么这条漫长的道路)。就像我之前所说的停止__浪费时间_并专注于__其他科目_,如果这不是您的兴趣所在。 2年是很长时间学习的东西,或者至少是为了获得正确的基础知识。 –

回答

2

使用GridBagLayout类。这是用于使用约束的定制设计。

3

您可以使用多个JPanels去接近你想要什么:

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(); 
      } 
     }); 
    } 
} 
+0

'f1.setBounds(200,100,500,300);'最好调用'f1。 pack();'紧接在'f1.setVisible(true);'之前'。+1 :) –

+0

是的,我知道。但是pack()总是使得gui太小,并且为了解决setBounds()的问题而工作正常 - 直到你同时调用pack()和setBounds(),然后你花费了接下来的2个小时试图弄清楚为什么setBounds )不会改变窗口的大小。 :( – 7stud

+0

尝试添加一些布局填充和'EmptBorder',这通常会让GUI感觉不那么'拥挤'。 –