2015-04-23 45 views
2

我正試圖爲一個簡單的計劃程序創建一個小主菜單,但我在按鈕之間留有一些空間時有點困難。他們只是緊挨着對方,我希望每個按鈕之間都有間隔。如何使用GridBagLayout在JButton之間創建間距?

我曾嘗試使用weightx,weighty命令,但似乎沒有改變。 我想在GUI的邊緣和按鈕的邊緣之間以及每個按鈕之間留出一些空白區域。

這裏的一個屏幕截圖

enter image description here

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

public class Scheduler { 

JButton VDay, VWeek, Task, Exit; 
JFrame wframe, dframe, tframe; 

JLabel head; 




public void CreateFrame() { 
    JFrame frame = new JFrame("Main Menu");  

    ButtonListener btnlst = new ButtonListener(); 
    JPanel panel = new JPanel(); 
    panel.setLayout(new GridBagLayout()); 
    GridBagConstraints c = new GridBagConstraints(); 

    c.weightx = 1; 
    c.weighty = .25; 
    c.gridx = 0; 
    c.gridy = 0; 
    c.gridwidth = 1; 
    c.gridheight = 1; 
    c.fill = GridBagConstraints.BOTH; 
    head = new JLabel("The Plain Scheduler"); 
    panel.add(head, c); 
    c.weightx = 1; 
    c.weighty = .25; 
    c.gridx = 0; 
    c.gridy = 1; 
    c.gridheight = 2; 
    c.gridwidth = 3; 
    VDay = new JButton("View Day"); 
    panel.add(VDay, c); 
    c.weightx = 1; 
    c.weighty = .25; 
    c.gridx = 0; 
    c.gridy = 3; 
    c.gridheight = 2; 
    c.gridwidth = 3; 
    VWeek = new JButton("View Week"); 
    panel.add(VWeek,c); 
    c.weightx = 1; 
    c.weighty = .25; 
    c.gridx = 0; 
    c.gridy = 5; 
    c.gridheight = 2; 
    c.gridwidth = 3; 
    Task = new JButton("Assign/Edit Tasks"); 
    panel.add(Task, c); 
    c.weightx = 1; 
    c.weighty = .25; 
    c.gridx = 0; 
    c.gridy = 7; 
    c.gridheight = 1; 
    c.gridwidth = 2; 
    Exit = new JButton("Exit"); 
    panel.add(Exit, c); 

    VDay.addActionListener(btnlst); 
    VWeek.addActionListener(btnlst); 
    Task.addActionListener(btnlst); 
    Exit.addActionListener(btnlst); 

    frame.add(panel); 
    frame.pack(); 
    frame.setVisible(true); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    } 
    public static void main(String[] args) { 
    Scheduler scheduler = new Scheduler(); 
    scheduler.CreateFrame(); 
    } 
} 
+1

嘗試使用'GridBagConstraints#insets' – MadProgrammer

+0

'我在按鈕之間留有一些空間是有點困難的 - - 教程再次舉了一個例子。注意按鈕4和按鈕5之間的空間。「我想在邊緣之間留出一些空白區域 - 通過在面板上使用」邊框「可以更好地完成此操作。本教程有一節「如何使用邊框」。 – camickr

+0

@MadProgrammer對不起,但你能給一個示例代碼看看它會是什麼樣子?我試過「c.insets = 2;」但我得到一個錯誤說:「錯誤:不兼容的類型:int不能轉換爲插入」 –

回答

1

可以使用GridBagConstraints#insets來定義間隔/填充被添加到細胞中,例如量...

Buttons

import java.awt.EventQueue; 
import java.awt.GridBagConstraints; 
import java.awt.GridBagLayout; 
import java.awt.Insets; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.UIManager; 
import javax.swing.UnsupportedLookAndFeelException; 

public class Scheduler { 

    JButton VDay, VWeek, Task, Exit; 
    JFrame wframe, dframe, tframe; 

    JLabel head; 

    public void CreateFrame() { 
     JFrame frame = new JFrame("Main Menu"); 

     JPanel panel = new JPanel(); 
     panel.setLayout(new GridBagLayout()); 
     GridBagConstraints c = new GridBagConstraints(); 

     c.weightx = 1; 
     c.weighty = .25; 
     c.insets = new Insets(5, 0, 5, 0); 
     c.gridwidth = GridBagConstraints.REMAINDER; 
     c.fill = GridBagConstraints.BOTH; 
     head = new JLabel("The Plain Scheduler"); 
     panel.add(head, c); 
     VDay = new JButton("View Day"); 
     panel.add(VDay, c); 
     VWeek = new JButton("View Week"); 
     panel.add(VWeek, c); 
     Task = new JButton("Assign/Edit Tasks"); 
     panel.add(Task, c); 
     Exit = new JButton("Exit"); 
     panel.add(Exit, c); 

     frame.add(panel); 
     frame.pack(); 
     frame.setVisible(true); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    } 

    public static void main(String[] args) { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
       } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { 
        ex.printStackTrace(); 
       } 

       Scheduler scheduler = new Scheduler(); 
       scheduler.CreateFrame(); 
      } 
     }); 
    } 
}