1
有幾種不同的命令可以在Java Swing中顯式地對齊元素。看來這些命令只能在一些非常特定的約束下工作,並且這些約束在任何地方都沒有記錄。大多數時候,我想要對齊元素,這些命令完全沒有做任何事情。所以我想知道爲什麼這些命令不會做文檔所說的那樣,以及如何在Swing中對齊元素?Java Swing爲什麼有時候只對齊工作?
作爲參考,這裏是一個帶有OK按鈕的SSCCE,當我們明確地將水平對齊設置爲中心時,該按鈕與左邊對齊。
import javax.swing.*;
import java.awt.*;
public class E {
public static void main(String[] args) {
JFrame frame = new JFrame();
JPanel notificationView = new JPanel();
notificationView.setPreferredSize(new Dimension(300, 145));
notificationView.setLayout(new GridBagLayout());
JPanel content = new JPanel();
content.setLayout(new BoxLayout(content, BoxLayout.Y_AXIS));
JLabel notificationText = new JLabel("Here is some text to display to the user and below this is an ok button.");
content.add(notificationText);
JButton buttonOkNotification = new JButton("OK");
//buttonOkNotification.setHorizontalAlignment(JLabel.CENTER); // does not do anything
//buttonOkNotification.setAlignmentX(Component.CENTER_ALIGNMENT); // does not do anything
content.add(buttonOkNotification);
notificationView.add(content);
frame.add(notificationView);
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
}
這些組件的屬性是不相關的佈局,它們僅用於提示如何使用其部分的成分。它們可以用於例如控制JTextField中的文本對齊。他們不會改變組件在其容器內的佈局方式。對於佈局管理器,請參閱https://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html – Durandal
1)*「作爲參考,這是一個SSCCE ..」*不,這是一個不可編譯的代碼片段。請仔細閱讀** [MCVE]和[簡短,獨立,正確的示例](http://www.sscce.org/)上的文檔。 2)請參閱[我是否應避免使用Java Swing中的set(Preferred | Maximum | Minimum)大小方法?](http://stackoverflow.com/q/7229226/418556)(是)3)提供ASCII藝術或以最小尺寸繪製GUI的*預期*佈局的簡單圖形,並且如果可調整大小,則具有更多寬度和高度。 4)請注意,在按鈕上調用的方法是對齊按鈕**的**內容,而不是按鈕本身。 –
1)我沒有包含類聲明以保持最小化,但我現在將其重新編輯回帖。 2)我沒有使用你的鏈接引用的任何方法。3)好的,我將就如何爲特定的intently GUI實現特定的外觀提出一個單獨的問題。 4)這實際上回答了我在這裏發佈的通用問題,謝謝。 –