为什么这个GroupLayout没有随窗口调整大小?

时间:2013-01-05 20:28:47

标签: java swing jython layout-manager

之前我没有使用过Swing,所以我在查看教程:
http://www.zetcode.com/gui/jythonswing/layout/

在底部,有一个示例使用GroupLayout创建一个随窗口调整大小的简单布局。我基本上复制了这个例子并放入了我自己的控件和布局。但是,当我执行代码时,所有控件都聚集在窗口的左上角,根本不会移动或调整大小。

我错过了什么?

代码:

#!/usr/local/bin/jython
# -*- coding: utf-8 -*-

from java.awt import Dimension
from java.awt import Color

from javax.swing import JButton,JList
from javax.swing import SwingConstants
from javax.swing import JFrame
from javax.swing import JLabel
from javax.swing import JTextArea
from javax.swing import BorderFactory
from javax.swing import GroupLayout


class Example(JFrame):

    def __init__(self):
        super(Example, self).__init__()

        self.initUI()

    def initUI(self):

        layout = GroupLayout(self.getContentPane())
        self.getContentPane().setLayout(layout)
        layout.setAutoCreateGaps(True)
        layout.setAutoCreateContainerGaps(True)

        self.setPreferredSize(Dimension(350, 300))

        self.data = ("one","two","three","four")
        flist = JList(self.data)

        edit = JButton("Edit")
        grab = JButton("Grab")
        status = JLabel("status")

        layout.setHorizontalGroup(layout.createParallelGroup()
                .addGroup(layout.createSequentialGroup()
                    .addComponent(flist)
                    .addGroup(layout.createParallelGroup()
                        .addComponent(edit)
                        .addComponent(grab)
                    )
                )
                .addComponent(status)
            )

        layout.setVerticalGroup(layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup()
                    .addComponent(flist)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(edit)
                        .addComponent(grab)
                    )
                )
                .addComponent(status)
            )

        layout.linkSize(SwingConstants.HORIZONTAL, [edit, grab])

        self.pack()

        self.setTitle("Windows")
        self.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
        self.setLocationRelativeTo(None)
        self.setVisible(True)


if __name__ == '__main__':
    Example()

2 个答案:

答案 0 :(得分:0)

BorderLayout相当简单。做类似的事情:

 from javax.awt import BorderLayout
 from javax.swing import JButton, JFrame
 someButton = JButton("ClickMe")
 frame = JFrame("Funky Jython Program")
 frame.setLayout(BorderLayout())
 frame.add(someButton,BorderLayout.NORTH)

将JButton放在框架的顶部,以下按钮使用EAST,SOUTH,WEST或CENTER。

答案 1 :(得分:0)

我认为这是因为你只设置了preferredSize ..因此,只显示你喜欢的大小..要调整大小,你还应该包括MinimumSize和MaximumSize,这样当你使框架更小/更大时,组件将会跟随。

PS: hjek - 男人,这个人在询问GroupLayout;他没有问过BorderLayout。你的回答是不合逻辑的。