我有一個面板格式化爲GridBagLayout
。即使我使用setMinimumSize
來設置尺寸,它仍然太小。當您縮小窗口(只需使用鼠標拖動)時,它會超過標籤的大小,以便標籤顯示爲firs...
。但是,只有最左邊的標籤會像這樣縮小。無法停止面板變得太小
但是,正如您從運行下面的代碼所看到的那樣,面板仍然有可能脫離窗口的邊緣。我沒關係那的行爲,我只是不希望標籤的文字被搞砸了。澄清:我想既不標籤收縮,我希望面板滑下週圍面板的邊緣。
這是我能想出,在某種程度上這是很容易看到再現這種行爲最簡單的例子:
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
public class TestMain {
private JFrame frame;
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
TestMain window = new TestMain();
window.frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
public TestMain() {
initialize();
}
private void initialize() {
frame = new JFrame();
frame.setBounds(100, 100, 450, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel outer = new JPanel();
outer.setLayout(new BoxLayout(outer, BoxLayout.Y_AXIS));
outer.setBorder(new EmptyBorder(30,30,30,30));
outer.setBackground(Color.DARK_GRAY);
JPanel inner = new JPanel();
inner.setLayout(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
JLabel labelOne = new JLabel();
labelOne.setText("first label");
c.anchor = GridBagConstraints.LINE_END;
inner.add(labelOne, c);
JLabel labelTwo = new JLabel();
labelTwo.setText("second label");
c.anchor = GridBagConstraints.LINE_START;
c.gridx = 2;
inner.add(labelTwo, c);
c.gridx = 1;
c.weighty = 1.0;
inner.add(Box.createHorizontalStrut(100), c);
outer.add(inner);
frame.add(outer);
}
}
運行這段代碼,然後水平調整窗口大小。最終窗口被調整得足夠小,標籤變得混亂。
您可以嘗試設置ipadx/ipady約束來定義最小可能的單元大小。 – StanislavL