2011-06-28 119 views
2

我仍舊習慣於使用舊的Java GUI並遇到某種殘缺。這只是整個GUI的東西還是新鮮的,我只使用了FlowLayout(),我猜想我找不到它。這不是作業或任何事情,只是我正在做的事情。不管怎麼說,我的問題:Java中的間距標籤和按鈕

基本上,我希望它看起來像這樣

Welcome! 
Today's Date is: 
(space) 
(space) 
Exit button 

我的問題是我不知道足夠的任意佈局的完成這件事。我一直在閱讀和搞亂GridBagLayout,我無法做任何事情,我嘗試了另一種方式,按鈕和dang程序一樣大。無論如何,這是我的代碼,儘管它應該沒有關係。

private void welcomeTab(){ 
    welcomePanel = new JPanel(new FlowLayout()); 
    String currentTime = SimpleDateFormat.getInstance().format(
    Calendar.getInstance().getTime()); 
    final JLabel welcomeLabel = new JLabel("Welcome!", JLabel.CENTER); 
    final JLabel dateLabel = new JLabel ("Today's date is: " + currentTime, JLabel.CENTER); 
    welcomePanel.add(welcomeLabel); 
    welcomePanel.add(dateLabel); 
    welcomePanel.add(createExitButton()); 
} 

謝謝。我一直在閱讀這麼多,而且似乎所有的例子都是用所有按鈕創建窗格,這讓我瘋狂。

+0

你可以使用絕對佈局,把你的部件幾乎無論你要他們。 http://download.oracle.com/javase/tutorial/uiswing/layout/none。html – Bartzilla

+0

@Bartzilla:*「..把你的組件放在任何你想要的地方。」* -1真正的技巧是將它們放在他們需要**的地方。一旦你確定了背後的邏輯,你可以在一個自定義佈局管理器中表達它。 –

回答

4

嘗試addming一個Box.createHorizontalStrut(i_width)

welcomePanel.add(welcomeLabel); 
welcomePanel.add(Box.createHorizontalStrut(10)); 
welcomePanel.add(dateLabel); 
welcomePanel.add(Box.createHorizontalStrut(10)); 
welcomePanel.add(createExitButton()); 
1

GridBagLayout在其最好與Netbeans 7.0。檢查一下,你不會後悔的。

建議:

排序您的問題出使用的Netbeans的GridBagLayout設計,然後再去讀生成的代碼來了解該修補程序。

免責聲明:

編寫自定義代碼可以很毛。你需要熟悉這一點。它提供了在大多數地方添加自定義代碼的鉤子。但我仍覺得它非常麻煩。你需要自己分類。

+0

*「..您需要自行排序。」*當然,最好在沒有強大的automagic IDE'幫助'的情況下完成。在理解佈局之前,拋出佈局問題的IDE不是解決方案。 –

+0

@Andrew:用一種工具對其進行排序,然後閱讀生成的代碼......另一種方式。我自己討厭魔法,不想在沒有真正知道的情況下做事。雖然我不介意你的負面情緒。 –

+0

如果您將「仇恨魔法」句子回覆到您的答案中(某種形式),我會提出反向回票。這個理論的問題在於,不是我對你的答覆進行了低票。我覺得評論就夠了。和平。 –

5

是這樣的嗎?

Welcome Panel

import java.awt.*; 
import javax.swing.*; 
import javax.swing.border.*; 
import java.util.Calendar; 
import java.text.SimpleDateFormat; 

class WelcomeLayout { 

    private JPanel welcomePanel; 

    WelcomeLayout() { 
     welcomeTab(); 
     welcomePanel.setBorder(new TitledBorder("The Welcome Panel")); 
     JOptionPane.showMessageDialog(null, welcomePanel); 
    } 

    private void welcomeTab() { 
     welcomePanel = new JPanel(new GridLayout(0,1,1,1)); 
     String currentTime = SimpleDateFormat.getInstance().format(
     Calendar.getInstance().getTime()); 
     final JLabel welcomeLabel = new JLabel("Welcome!", JLabel.CENTER); 
     final JLabel dateLabel = new JLabel ("Today's date is: " + currentTime, JLabel.CENTER); 
     welcomePanel.add(welcomeLabel); 
     welcomePanel.add(dateLabel); 

     // one (kludgy) way to addd space. 
     welcomePanel.add(new JLabel("")); 
     welcomePanel.add(new JLabel("")); 

     welcomePanel.add(createExitButton()); 
    } 

    private JComponent createExitButton() { 
     JButton exit = new JButton("Exit"); 
     // the FlowLayout is to center the JButton; 
     JPanel exitPanel = new JPanel(new FlowLayout(FlowLayout.CENTER)); 
     exitPanel.add(exit); 
     return exitPanel; 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
       WelcomeLayout wl = new WelcomeLayout(); 
      } 
     }); 
    } 
} 

使用BoxLayout由塔拉·艾哈邁德·汗/Zéychin的建議

enter image description here

import java.awt.*; 
import javax.swing.*; 
import javax.swing.border.*; 
import java.util.Calendar; 
import java.text.SimpleDateFormat; 

class WelcomeBoxLayout { 

    private JPanel welcomePanel; 

    WelcomeBoxLayout() { 
     welcomeTab(); 
     welcomePanel.setBorder(new TitledBorder("The Welcome Panel")); 
     JOptionPane.showMessageDialog(null, welcomePanel); 
    } 

    private void welcomeTab() { 
     welcomePanel = new JPanel(); 
     BoxLayout layout = new BoxLayout(welcomePanel, BoxLayout.Y_AXIS); 
     welcomePanel.setLayout(layout); 
     String currentTime = SimpleDateFormat.getInstance().format(
     Calendar.getInstance().getTime()); 
     final JLabel welcomeLabel = new JLabel("Welcome!", JLabel.CENTER); 
     final JLabel dateLabel = new JLabel ("Today's date is: " + currentTime, JLabel.CENTER); 
     welcomePanel.add(welcomeLabel); 
     welcomePanel.add(dateLabel); 

     welcomePanel.add(Box.createVerticalStrut(20)); 

     welcomePanel.add(new JButton("Exit")); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
       WelcomeBoxLayout wl = new WelcomeBoxLayout(); 
      } 
     }); 
    } 
}