2014-06-05 59 views
1

所以這裏是我到目前爲止,我會添加更多,但這裏是我所謂的骨架。我遇到的麻煩是決定我應該使用什麼樣的佈局,如果我應該自己做,我該怎麼做呢?我應該如何去插入佈局和佈局?

關於我的創建的一些信息將非常有用:我將在GUI的最左側區域的右側有多個標籤和輸入空格,右下角將出現一個按鈕,在右上方將會有一個文本框,它會不斷地傳輸機器人正在做的事情的信息。

請幫我找一個我可以使用的佈局,並告訴我如何輕鬆實現它(FYI我使用的是Ubuntu)。

An example of the desired layout

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

public class dogedice { 

    public static void createWindow() { 

     JFrame frame = new JFrame("Framework Michael+Dalin"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     JLabel textLabel = new JLabel("Welcome to the framework of our future bots!"); 
     JLabel textLabel2 = new JLabel("Username"); 
     JTextField textField = new JTextField("Username"); 

     JPanel panel = new JPanel();// Any new parts must be added here! 
     panel.add(textLabel); 
     panel.add(textField); 
     panel.add(textLabel2); 

     textLabel.setPreferredSize(new Dimension(800, 750)); 
     frame.add(panel); 

     frame.setLocationRelativeTo(null); 
     frame.pack(); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     createWindow(); 
    } 
} 
+3

提供ASCII藝術(或一個簡單的繪圖圖像),因爲它應該以最小尺寸顯示,並且(如果可調整大小)以及額外的寬度/高度。 –

+0

新增並且我不確定什麼尺寸的atm ... – michaeladair

回答

4

首先來看看the Visual Guide to Layout Managers。然後,您會注意到,只需一個佈局管理器或幾個組件的組合,您就可以通過一點創意就可以實現任何所需的佈局。

根據您的描述,您可以在每個象限中使用BorderLayoutJPanel

  • 在南象限中,FlowLayout可以與右對齊一起使用。
  • 在WEST象限中,可以使用GridBagLayout創建兩列,一個用於標記(我假定它是JLabel),另一個用於輸入空間(JTextField)。
  • 在中心象限,文本區域可以用於顯示(封裝在JScrollPanelJTextArea

輸出。這裏是一個例子:

JFrame with multiple layout managers

import javax.swing.*; 
import javax.swing.border.EmptyBorder; 
import java.awt.*; 

public class LayoutExample1 extends JFrame { 
    private static final long serialVersionUID = 1L; 
    private JPanel contentPane; 
    private JTextField textField; 

    public static void main(String[] args) { 
     EventQueue.invokeLater(new Runnable() { 
      public void run() { 
       try { 
        LayoutExample1 frame = new LayoutExample1(); 
        frame.setVisible(true); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
      } 
     }); 
    } 

    public LayoutExample1() { 
     setTitle("Title of GUI"); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     contentPane = new JPanel(); 
     contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); 
     contentPane.setLayout(new BorderLayout(0, 0)); 
     setContentPane(contentPane); 

     JPanel panel = new JPanel(); 
     contentPane.add(panel, BorderLayout.WEST); 
     GridBagLayout gbl_panel = new GridBagLayout(); 
     gbl_panel.columnWidths = new int[]{0, 0}; 
     gbl_panel.rowHeights = new int[]{0, 0}; 
     gbl_panel.columnWeights = new double[]{0.0, 1.0}; 
     gbl_panel.rowWeights = new double[]{0.0, Double.MIN_VALUE}; 
     panel.setLayout(gbl_panel); 

     JLabel lblTag = new JLabel("Tag 1"); 
     GridBagConstraints gbc_lblTag = new GridBagConstraints(); 
     gbc_lblTag.insets = new Insets(0, 0, 0, 5); 
     gbc_lblTag.anchor = GridBagConstraints.EAST; 
     gbc_lblTag.gridx = 0; 
     gbc_lblTag.gridy = 0; 
     panel.add(lblTag, gbc_lblTag); 

     textField = new JTextField(); 
     GridBagConstraints gbc_textField = new GridBagConstraints(); 
     gbc_textField.fill = GridBagConstraints.HORIZONTAL; 
     gbc_textField.gridx = 1; 
     gbc_textField.gridy = 0; 
     panel.add(textField, gbc_textField); 
     textField.setColumns(10); 

     JPanel panel_1 = new JPanel(); 
     contentPane.add(panel_1, BorderLayout.SOUTH); 
     panel_1.setLayout(new FlowLayout(FlowLayout.RIGHT, 5, 5)); 

     JButton btnConfirm = new JButton("Confirm"); 
     panel_1.add(btnConfirm); 

     JScrollPane scrollPane = new JScrollPane(); 
     contentPane.add(scrollPane, BorderLayout.CENTER); 
     JTextArea textArea = new JTextArea("I am a bot and I will tell you what I am doing to your systems!"); 
     textArea.setColumns(20); 
     scrollPane.setViewportView(textArea); 

     pack(); 
    } 

} 
+0

CanadianDavid,謝謝。 – michaeladair

+0

@michaeladair如果它解決了您的問題,請[接受此答案](http://meta.stackexchange.com/a/5235)。歡迎來到Stack Overflow。 –

+0

大衛,有一個問題...我添加了另一個y = 1的標籤,我想知道如何添加第二個文本輸入框,因爲我不知道標題的位置在哪裏... – michaeladair

0

如果UI就是這麼簡單,把所有的標籤和輸入與GridLayout的一個JPanel,並把它與一個BorderLayout的的的mainPanel中心。

如果你有興趣在一個更復雜的佈局,並希望學習如何使用一個,我建議http://miglayout.com/

+0

不知道該怎麼做xD,事實是我不知道很多Java編碼。之前嘗試過的教程和內容,實際操作對我更有幫助,所以在學習過程中我會學習。你介意怎麼做? – michaeladair