0

我以前没有使用过 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()
4

2 回答 2

0

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

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

于 2014-07-09T18:31:10.260 回答
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。

于 2013-01-11T21:32:35.963 回答