我目前正在開發的小工具有以下GUI程序:如何這個GUI中的Java Swing
現在我有一個容器(JPanel中)與在擁有一切BorderLayout的佈局地點。我有另外兩個JPanels分別放在BorderLayout.NORTH和BorderLayout.SOUTH上,每個都有GridLayout(2列1行)。桌子放在中心的主容器上。
您認爲這是最好的方法嗎?我在處理組件和框架邊界之間的間隔時很困難。
現在,我有這樣的代碼:
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.GridLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JSeparator;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
public class GUI extends JFrame {
private JButton loadFileBtn = new JButton("Load File");
private JButton generateReportBtn = new JButton("Generate Report");
private JButton exitBtn = new JButton("Exit");
private JLabel fileNameLbl = new JLabel("File Name Here");
private JMenuBar menuBar = new JMenuBar();
private JMenu fileMI = new JMenu("File");
private JMenuItem openFileMenu = new JMenuItem("Open File");
private JSeparator separator = new JSeparator();
private JMenuItem exitMenu = new JMenuItem("Exit");
private JMenu reportMI = new JMenu("Report");
private JMenuItem generateReportMenu = new JMenuItem("Generate Report");
private JMenu helpMI = new JMenu("Help");
private JMenuItem aboutMenu = new JMenuItem("About");
private JTable table = new JTable(5, 2);
private JPanel mainPanel = new JPanel(new BorderLayout(10, 10));
private JPanel panel1 = new JPanel(new BorderLayout());
private JPanel panel2 = new JPanel(new GridLayout(1, 2));
private JPanel panel3 = new JPanel(new GridLayout(1, 2));
public GUI() {
super("Sample GUI");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(new Dimension(300, 300));
setResizable(false);
setLayout(new BorderLayout(10, 10));
fileMI.add(openFileMenu);
fileMI.add(separator);
fileMI.add(exitMenu);
reportMI.add(generateReportMenu);
helpMI.add(aboutMenu);
menuBar.add(fileMI);
menuBar.add(reportMI);
menuBar.add(helpMI);
setJMenuBar(menuBar);
panel1.add(table, BorderLayout.CENTER);
panel2.add(fileNameLbl);
panel2.add(loadFileBtn);
panel3.add(generateReportBtn);
panel3.add(exitBtn);
mainPanel.add(panel2, BorderLayout.NORTH);
mainPanel.add(panel1, BorderLayout.CENTER);
mainPanel.add(panel3, BorderLayout.SOUTH);
add(mainPanel);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
GUI app = new GUI();
app.setVisible(true);
}
});
}
}
你認爲會做到這一點,最好的方法?
任何幫助,將不勝感激。謝謝。
UPDATE:
現在,我有以下GUI
我想要的組件從空間的邊界遠均勻,就像在實體模型。
您的問題究竟是什麼?您想介紹哪些空間並導致問題?你總是可以使用'BorderFactory.createEmptyBorder(int,int,int,int)' – 2013-03-12 14:19:21
@Guillaume Polet不確定,請不要攻擊,你的意思是使用'EmptyBorder'來避免'setPreferredSize',或者使用'EmptyBorder'在'NestedLayout'窗體,'MigLayout'或... – mKorbel 2013-03-12 14:25:30
@mKorbel中避免使用'GridBagLayout'的'SpringLayout'空白邊框是一個非常簡單的(有時候是優雅的)解決方案,可以正確定位容器中的組件,而無需切換到另一個LayoutManager。如果OP對這些LayoutManager感到滿意,空白的邊界可能是解決他的實際問題的好辦法。 – 2013-03-12 14:32:55