Bal*_*sar 6 java swing jpanel layout-manager
更新:我收到了有关发布非工作代码的合理批评.我已经把它牢记在心,我正在用一个完整的工作示例来更新这篇文章.我也相应地更新了描述:
我有一个非常简单的java swing GUI,它的组件占用了最大Y范围组件所使用的等量垂直(Y)空间,但完全不必要.我试图使用preferredSize提示缩小那些不需要那么多垂直空间的组件,但无济于事.
基本布局很简单:有一个主窗口和三个垂直面板.布局是一个简单的GridLayout(我宁愿保持这种方式,除非有人告诉我我需要用GridLayout做不到的事).所有三个面板似乎占据相同数量的垂直空间,即使在滑块的情况下,这也是大量浪费空间.如何让每个子窗格只使用每个需要的空间?即我希望两个滑块窗口只有滑块和它们的描述一样高.
代码:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class test {
public static void main(String[] arg) {
JFrame mainWindow = new JFrame();
JSlider slider1 = new JSlider(0,100,50);
JSlider slider2 = new JSlider(0,100,50);
JPanel pnlSlider1 = new JPanel();
pnlSlider1.setLayout(new GridLayout(1,1)); // 1 row, 1 column
pnlSlider1.add(new JLabel("Description for slider1"));
pnlSlider1.add(slider1);
JPanel pnlSlider2 = new JPanel();
pnlSlider2.setLayout(new GridLayout(1,1)); // 1 row, 1 column
pnlSlider2.add(new JLabel("Description for slider2"));
pnlSlider2.add(slider2);
// label should now be to the left of slider
String content = "<html>Some rather long winded HTML content</html>";
JEditorPane ep = new JEditorPane("text/html", content);
// this is the main window panel
JPanel panel = new JPanel();
panel.setLayout(new GridLayout(3,1)); // 3 rows, 1 column
panel.add(ep);
panel.add(pnlSlider1);
panel.add(pnlSlider2);
// tie it all together and display the window
mainWindow.setPreferredSize(new Dimension(300, 600));
mainWindow.setLocation(100, 100);
mainWindow.getContentPane().add(panel);
mainWindow.pack();
mainWindow.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
mainWindow.setVisible(true);
}
}
Run Code Online (Sandbox Code Playgroud)
(删除了关于30年内没有看到任何GUI编码进展的咆哮,因为这与问题无关,可能也不会在这篇文章中解决)
..components占用看起来与最大Y范围组件使用的等量垂直(Y)空间,但完全不必要的.
是的,这是方式GridLayout
的设计工作.
使用一个GridBagLayout
或BoxLayout
或GroupLayout
代替,其每一个可以做可变大小(宽度和高度)的组件的单个列或行.
归档时间: |
|
查看次数: |
882 次 |
最近记录: |