2013-07-01 133 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感覺不那麼'擁擠'。 –