标签: grouplayout

GroupLayout一次只能与一个容器一起使用

不确定为什么会出现这个错误.我正在使用GroupLayout,因为我希望它为我做间距,并将在未来向框架添加更多面板.下面是堆栈跟踪.

Exception in thread "main" java.lang.IllegalArgumentException: GroupLayout can only be used with one Container at a time
    at javax.swing.GroupLayout.checkParent(Unknown Source)
    at javax.swing.GroupLayout.invalidateLayout(Unknown Source)
    at java.awt.Container.invalidate(Unknown Source)
    at java.awt.Component.addNotify(Unknown Source)
    at java.awt.Container.addNotify(Unknown Source)
    at javax.swing.JComponent.addNotify(Unknown Source)
    at java.awt.Container.addNotify(Unknown Source)
    at javax.swing.JComponent.addNotify(Unknown Source)
    at java.awt.Container.addNotify(Unknown Source)
    at javax.swing.JComponent.addNotify(Unknown Source)
    at javax.swing.JRootPane.addNotify(Unknown Source)
    at java.awt.Container.addNotify(Unknown Source)
    at java.awt.Window.addNotify(Unknown Source)
    at java.awt.Frame.addNotify(Unknown Source)
    at java.awt.Window.pack(Unknown Source)
    at client.AlternateGUI.drawGui(AlternateGUI.java:54)
    at client.AlternateGUI.main(AlternateGUI.java:24)
Run Code Online (Sandbox Code Playgroud)

这是代码:

package client;

import java.awt.Component;*

public class AlternateGUI {
    private JList people;
    private DefaultListModel …
Run Code Online (Sandbox Code Playgroud)

java swing exception layout-manager grouplayout

12
推荐指数
1
解决办法
1万
查看次数

Swing GroupLayout:调整和限制组件大小

GroupLayout用来管理一些动态生成的数据输入表单中的组件.布局或多或少如此:

*-----------------------------------------------*
| label A     |   field A                       | 
| label B     |   field B                       |
| label C     |   field C                       |
*-----------------------------------------------*
Run Code Online (Sandbox Code Playgroud)

我使用2个并行组作为水平布局,使用单个顺序组作为垂直布局.在大多数情况下,一切都很好.

我想将标签的最大宽度(仅仅是实例JLabel)限制为父级宽度的1/3 JFrame.如果它JFrame是一个固定的大小,这将是微不足道的,但我必须处理它被调整大小.

我正在接收ComponentListener.componentResized()事件,JFrame但是一旦我收到这样的事件,我就会有点困惑.

我没有运气就试过这种方法:

public void componentResized(ComponentEvent e) {
    int maxW = parentFrame.getWidth() / 3;
    for (JLabel l : labels) {
        l.setMaximumSize( // have also tried setSize() and setPreferredSize()
            new Dimension(
                Math.min(l.getSize().width, maxW),
                l.getMaximumSize().height));
    }
    groupLayout.invalidateLayout(getContentSpace());
}
Run Code Online (Sandbox Code Playgroud)

任何人都可以建议一种限制标签宽度的方法吗?

我可能每次都可以从头开始重建布局,但我觉得应该有一种更简单的方法.

java swing grouplayout

10
推荐指数
1
解决办法
2万
查看次数

与Java Swing的GroupLayout混合对齐

我正在尝试在我的应用程序中构建一个GUI窗口.我要做的是有一个窗口,顶部有几个按钮,还有一个大文本区域.像这样的东西:

+--------------------------------------------------+
| [button1] [button2]                    [button3] |
| +----------------------------------------------+ |
| | text area                                    | |
| |                                              | |
| |                                              | |
| |                                              | |
| +----------------------------------------------+ |
+--------------------------------------------------+
Run Code Online (Sandbox Code Playgroud)

我几乎在那里,使用GroupLayout:

  layout.setHorizontalGroup(
    layout.createParallelGroup()
      .addGroup(layout.createSequentialGroup()
        .addComponent(button1)
        .addComponent(button2))
        .addComponent(closeWindow))
      .addComponent(textarea1)
  );

  layout.setVerticalGroup(
    layout.createSequentialGroup()
      .addGroup(layout.createParallelGroup()
        .addComponent(button1)
        .addComponent(button2)
        .addComponent(button3))
      .addComponent(textarea)
  );
Run Code Online (Sandbox Code Playgroud)

问题是,这最终会使button3与左边对齐,另外两个.我似乎无法弄清楚如何只在一个按钮上指定对齐方式.我可以在整个按钮栏上进行GroupLayout.Alignment.TRAILING,但是它会击中所有3个按钮,这也不太合适.

那么正确的方法是什么?由于对齐仅适用于并行组,我不认为拥有一个包含两个顺序组的Horizo​​ntalGroup会有帮助吗?

我错过了什么?

java swing grouplayout

8
推荐指数
1
解决办法
4049
查看次数

GroupLayout给出了java swing的错误

我得到了很多错误.任何人都可以向我建议我哪里出错了GroupLayout.

layout.setHorizontalGroup(
    layout.createSequentialGroup()
        .addComponent(new JLabel("Enter Book Name"))
        .addComponent(new JTextField("TextField", 20))
);
Run Code Online (Sandbox Code Playgroud)

错误:

    Exception in thread "main" java.lang.IllegalStateException:
        javax.swing.JTextField[,0,0,0x0,invalid,layout=javax.swing.
            plaf.basic.BasicTextUI$UpdateHandler,alignmentX=0.0,
            alignmentY=0.0,border=javax.swing.plaf.BorderUIResource$
            CompoundBorderUIResource@3d0bbf9e,flags=296,maximumSize=,
            minimumSize=,preferredSize=,caretColor=sun.swing.
            PrintColorUIResource[r=51,g=51,b=51],disabledTextColor=javax
            .swing.plaf.ColorUIResource[r=184,g=207,b=229],editable=true
            ,margin=javax.swing.plaf.InsetsUIResource[top=0,left=0,
            bottom=0,right=0],selectedTextColor=sun.swing.
            PrintColorUIResource[r=51,g=51,b=51],selectionColor=javax.
            swing.plaf.ColorUIResource[r=184,g=207,b=229],columns=20,
            columnWidth=0,command=,horizontalAlignment=LEADING]
            is not attached to a vertical group
            at javax.swing.GroupLayout.checkComponents(Unknown Source)
            at javax.swing.GroupLayout.prepare(Unknown Source)

java layout swing grouplayout

7
推荐指数
1
解决办法
7929
查看次数

DEFAULT_SIZE和PREFERRED_SIZE之间有什么区别?

我使用的Swing的GroupLayout我感到困惑的价值观GroupLayout.DEFAULT_SIZEGroupLayout.PREFERRED_SIZE.我永远不知道何时在方法中使用它们GroupLayout.addComponent(Component, int, int, int).

假设我有这个代码:

GroupLayout l = ...;

l.setHorizontalGroup(l.createSequentialGroup()
    .addComponent(tf1)
    .addComponent(tf2));

l.setVerticalGroup(l.createParallelGroup()
    .addComponent(tf1)
    .addComponent(tf2));
Run Code Online (Sandbox Code Playgroud)

JTextField在一条线上有两个s GroupLayout(一个顺序组水平,一个平行组垂直).如果我现在调整窗口大小,两个组件都获得可用空间(每个50%).但是我只希望第一个文本字段水平增长/缩小,只希望第二个文本字段垂直增长/缩小.我应该使用什么值min,prefmax来实现这个目标?我知道我可以尝试一下,看看哪种组合有效,但我想知道这个问题背后的原因.

java size swing resize grouplayout

6
推荐指数
1
解决办法
1500
查看次数

以组件为中心的NetBeans,GUI构建器(组布局)

我正在尝试设计一个JButton(一个"Ok"按钮),看起来不错,必须在包含JFrame中水平居中.
我正在使用带有自由格式布局(GroupLayout)的GUI Builder.

我已经参加了几个GUI构建器教程(http://netbeans.org/kb/docs/java/quickstart-gui.html),但还没有找到这个主题.在其他gui构建器(delphi)中,这可以通过从两个边缘移除锚点来完成.

java swing netbeans grouplayout

6
推荐指数
2
解决办法
8135
查看次数

为什么我的 JTextArea 会溢出 GroupLayout 中的框架?

我正在使用 GroupLayout 观察一些奇怪的行为。我有一个 JTextArea,它包含在 JScrollPane 中,它正在调整大小并将其他组件推出 JFrame。奇怪的是,如果我重新排列布局,使 JTextArea 上方或下方没有任何内容(也没有间隙),它工作正常。就好像文本区域在询问容器容器中有多少空间,然后将其 100% 拿走,而不管其他组件。另一个奇怪的事情是,它似乎只有在 JTextArea(不是 JScrollPane)大小加上容器内的其他组件高度达到 Short.MAX_VALUE 时才会发生。

如果我将滚动窗格的垂直组中的最大大小(将组件添加到布局时)指定为小于 Short.MAX_VALUE 的值,则似乎可以解决问题(只要该值与 Short.MAX_VALUE 之间的差异)。 MAX_VALUE 大于所有其他组件的高度)。例如

.addComponent(textArea, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE - 500)

此外,如果我将首选大小设置为一个小的正值,而不是 GroupLayout.PREFERRED_SIZE 或 GroupLayout.DEFAULT_SIZE,它似乎也会使这种行为消失。例如

.addComponent(textArea, 0, 1, Short.MAX_VALUE)

GroupLayout 上的 Java 教程似乎没有提及任何关于此的内容,并且倾向于到处使用 Short.MAX_VALUE。我尝试谷歌搜索以找到答案,但我发现这个问题很难用搜索词来描述。

我是否发现了错误,或者我只是不了解 GroupLayout?后者似乎更有可能。

此示例将创建一个简单的文本区域。按下下方的按钮以填充文本(并在 JScrollPane 内调整 JTextArea 的大小)。然后,您可以在文本区域内单击并添加或删除行。添加一些额外的线条后,单击重绘按钮(或调整框架大小)以查看奇怪的行为。

public class GroupLayoutTest {
    public GroupLayoutTest() {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                final JFrame frame = new JFrame("GroupLayout test");
                Container panel = frame.getContentPane();

                GroupLayout layout = new …
Run Code Online (Sandbox Code Playgroud)

java swing grouplayout

5
推荐指数
1
解决办法
3737
查看次数

Java - 在GroupLayout中混合组件大小

我正在尝试为计算器GUI安排两组按钮.每个人都使用GroupLayout来制作它们.一组是数字(和"."),另一组是操作按钮.这基本上有效但如果其中一个按钮具有双倍长度(例如我的操作集上的等号按钮),则会抛出其他按钮.我将使用操作集作为示例.有两列和四行按钮.最后一行只有一个按钮 - 等于.我希望在两列上进行双倍长度拉伸.目前,当我希望第二列位于其上时,它只是将第二列推到它的末端.

这是布局的代码 - operLayout是操作布局的名称,第一行是左右括号,第二行是+和 - ,第三行是*和/,最后一行是等于.每个按钮在其他地方都设置了minimumSize(它们都是相同的,除了equals是两倍长).

operLayout.setAutoCreateGaps(true);
operLayout.setAutoCreateContainerGaps(true);
operLayout.setVerticalGroup(operLayout
        .createSequentialGroup()
        .addGroup(
operLayout.createParallelGroup(GroupLayout.Alignment.BASELINE).addComponent(leftBracket)
                            .addComponent(rightBracket))
            .addGroup(operLayout.createParallelGroup().addComponent(add).addComponent(subtract))
            .addGroup(operLayout.createParallelGroup().addComponent(multiply).addComponent(divide))
            .addGroup(operLayout.createParallelGroup().addComponent(equals)));
    operLayout.setHorizontalGroup(operLayout
            .createSequentialGroup()
            .addGroup(
                    operLayout.createParallelGroup().addComponent(leftBracket).addComponent(add)
                            .addComponent(multiply).addComponent(equals))
            .addGroup(
                    operLayout.createParallelGroup().addComponent(rightBracket).addComponent(subtract)
                            .addComponent(divide)));
Run Code Online (Sandbox Code Playgroud)

我明白为什么会这样,但我不知道如何解决这个问题.有一个简单的方法吗?或者我应该改变我的方式吗?谢谢

java swing components grouplayout preferredsize

5
推荐指数
1
解决办法
842
查看次数

使用Java中的GroupLayout构建GUI

我需要使用GroupLayout(而不是其他布局)构建GUI.GUI将如下所示:

----------------------------
| field 1  field 2  field 3 |

| FFIEEELLLDD4 FIELDDDDDD5  |

| FIEEEEEEEEEEEEEEELDDDD 6  |
_____________________________
Run Code Online (Sandbox Code Playgroud)

字段1 - 3各占1个长度,字段4和5各占1.5长度,字段6占3个长度.这三组在开始和结束时都是对齐的.

我一直在指这个http://docs.oracle.com/javase/tutorial/uiswing/layout/group.html.

为简单起见,我将使用JLabel作为字段的占位符.

到目前为止,这是我的代码,我没有运气获得我想要的GUI.

public class RecorderGUI extends JFrame {
    private final JLabel one;
    private final JLabel two;
    private final JLabel three;
    private final JLabel four;
    private final JLabel five;
    private final JLabel six;
public RecorderGUI() {
    JFrame frame = new JFrame();
    JPanel panel = new JPanel();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    GroupLayout layout = new GroupLayout(panel);
    panel.setLayout(layout);

    one = new …
Run Code Online (Sandbox Code Playgroud)

java swing grouplayout

5
推荐指数
1
解决办法
1万
查看次数

仅使用GroupLayout设置面板的最大高度(不使用setMaximumSize)

我查看了所有其他答案,但他们都建议使用GroupLayout,BoxLayout或者将使用GridBagLayout的面板与另一个使用上述布局之一的面板进行包装.

我目前正在使用GridBagLayout,我想知道是否有办法设置面板的最大高度.我不希望限制宽度,只有高度,所以setMaximumSize(Dimension)不起作用.

GridBagLayout是否以任何方式支持此功能?对不起,如果我的问题不包含任何代码,我可能找到的唯一尝试是setMaximumSize(Dimension),或将其包装在另一个面板中(我希望避免)

java swing gridbaglayout grouplayout

5
推荐指数
2
解决办法
4391
查看次数