| /* |
| * Copyright 2000-2009 JetBrains s.r.o. |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| package com.intellij.uiDesigner.core; |
| |
| import com.intellij.uiDesigner.compiler.GridBagConverter; |
| import junit.framework.TestCase; |
| |
| import javax.swing.*; |
| import java.awt.*; |
| |
| /** |
| * @author yole |
| */ |
| public class GridBagConverterTest extends TestCase { |
| /** |
| * button 1 |
| * <empty> |
| * button 2 |
| */ |
| public void testLayout2() { |
| final GridBagLayout layoutManager = new GridBagLayout(); |
| final JPanel panel = new JPanel(layoutManager); |
| |
| final JButton button1 = new JButton(); |
| button1.setMinimumSize(new Dimension(9, 7)); |
| button1.setPreferredSize(new Dimension(50, 10)); |
| |
| final JButton button2 = new JButton(); |
| button2.setMinimumSize(new Dimension(15, 6)); |
| button2.setPreferredSize(new Dimension(50, 10)); |
| |
| GridBagConverter converter = new GridBagConverter(); |
| final GridConstraints button1Constraints = new GridConstraints(0, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, |
| GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_CAN_SHRINK, |
| null, null, null, 0); |
| converter.addComponent(button1, button1Constraints); |
| |
| final GridConstraints button2Constraints = new GridConstraints(2, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, |
| GridConstraints.SIZEPOLICY_CAN_GROW | GridConstraints.SIZEPOLICY_CAN_SHRINK, |
| GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0); |
| |
| converter.addComponent(button2, button2Constraints); |
| |
| applyConversionResults(panel, converter); |
| |
| assertEquals(20, panel.getPreferredSize().height); |
| assertEquals(50, panel.getPreferredSize().width); |
| |
| assertEquals(17, panel.getMinimumSize().height); |
| assertEquals(50, panel.getMinimumSize().width); |
| |
| panel.setSize(new Dimension(500, 100)); |
| panel.doLayout(); |
| |
| assertEquals(50, button1.getHeight()); |
| assertEquals(50, button2.getHeight()); |
| } |
| |
| public void testLayout2ByConstraints() { |
| final GridBagLayout layoutManager = new GridBagLayout(); |
| final JPanel panel = new JPanel(layoutManager); |
| final JButton button1 = new JButton(); |
| final JButton button2 = new JButton(); |
| |
| GridBagConverter converter = new GridBagConverter(); |
| final GridConstraints button1Constraints = new GridConstraints(0, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, |
| GridConstraints.SIZEPOLICY_CAN_GROW, |
| GridConstraints.SIZEPOLICY_CAN_SHRINK, |
| new Dimension(9, 7), new Dimension(50, 10), null, 0); |
| converter.addComponent(button1, button1Constraints); |
| |
| final GridConstraints button2Constraints = new GridConstraints(2, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, |
| GridConstraints.SIZEPOLICY_CAN_GROW | GridConstraints.SIZEPOLICY_CAN_SHRINK, |
| GridConstraints.SIZEPOLICY_FIXED, |
| new Dimension(15, 6), new Dimension(50, 10), null, 0); |
| |
| converter.addComponent(button2, button2Constraints); |
| |
| applyConversionResults(panel, converter); |
| |
| assertEquals(20, panel.getPreferredSize().height); |
| assertEquals(50, panel.getPreferredSize().width); |
| |
| assertEquals(17, panel.getMinimumSize().height); |
| assertEquals(50, panel.getMinimumSize().width); |
| |
| panel.setSize(new Dimension(500, 100)); |
| panel.doLayout(); |
| |
| assertEquals(50, button1.getHeight()); |
| assertEquals(50, button2.getHeight()); |
| } |
| |
| public void testLayout3() { |
| final JPanel panel = new JPanel(new GridBagLayout()); |
| |
| final JButton button1 = new JButton(); |
| button1.setPreferredSize(new Dimension(100,20)); |
| final JButton button2 = new JButton(); |
| button2.setPreferredSize(new Dimension(100,100)); |
| |
| GridBagConverter converter = new GridBagConverter(); |
| converter.addComponent(button1, new GridConstraints(0,0,1,1,GridConstraints.ANCHOR_CENTER,GridConstraints.FILL_BOTH, |
| GridConstraints.SIZEPOLICY_WANT_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0)); |
| |
| converter.addComponent(button2, new GridConstraints(1,0,1,1,GridConstraints.ANCHOR_CENTER,GridConstraints.FILL_BOTH, |
| GridConstraints.SIZEPOLICY_WANT_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0)); |
| |
| applyConversionResults(panel, converter); |
| final Dimension preferredSize = panel.getPreferredSize(); |
| assertEquals(120, preferredSize.height); |
| } |
| |
| public void testLayout4() { |
| final JPanel panel = new JPanel(new GridBagLayout()); |
| |
| // button 1 button 3 |
| // button 2 button 3 |
| |
| final JButton button1 = new JButton(); |
| button1.setPreferredSize(new Dimension(100,10)); |
| final JButton button2 = new JButton(); |
| button2.setPreferredSize(new Dimension(100,10)); |
| final JButton button3 = new JButton(); |
| button3.setPreferredSize(new Dimension(100,200)); |
| |
| GridBagConverter converter = new GridBagConverter(); |
| converter.addComponent(button1, new GridConstraints(0,0,1,1,GridConstraints.ANCHOR_CENTER,GridConstraints.FILL_BOTH, |
| GridConstraints.SIZEPOLICY_WANT_GROW, GridConstraints.SIZEPOLICY_WANT_GROW + GridConstraints.SIZEPOLICY_CAN_SHRINK, null, null, null, |
| 0)); |
| |
| converter.addComponent(button2, new GridConstraints(1,0,1,1,GridConstraints.ANCHOR_CENTER,GridConstraints.FILL_BOTH, |
| GridConstraints.SIZEPOLICY_WANT_GROW, GridConstraints.SIZEPOLICY_WANT_GROW + GridConstraints.SIZEPOLICY_CAN_SHRINK, null, null, null, |
| 0)); |
| |
| converter.addComponent(button3, new GridConstraints(0,1,2,1,GridConstraints.ANCHOR_CENTER,GridConstraints.FILL_BOTH, |
| GridConstraints.SIZEPOLICY_WANT_GROW, GridConstraints.SIZEPOLICY_WANT_GROW + GridConstraints.SIZEPOLICY_CAN_SHRINK, null, null, null, |
| 0)); |
| |
| applyConversionResults(panel, converter); |
| final Dimension preferredSize = panel.getPreferredSize(); |
| assertEquals(200, preferredSize.height); |
| } |
| |
| /* TODO[yole]: this layout does not work as expected at runtime |
| public void testLayout5_1() { |
| final JPanel panel = new JPanel(new GridBagLayout()); |
| |
| // label textfield(span 2) |
| // textfield(span 2) |
| |
| final JTextField label = new JTextField(); |
| label.setPreferredSize(new Dimension(10,30)); |
| |
| final JTextField field1 = new JTextField(); |
| field1.setPreferredSize(new Dimension(100,30)); |
| |
| final JTextField field2 = new JTextField(); |
| field2.setPreferredSize(new Dimension(100,30)); |
| |
| GridBagConverter converter = new GridBagConverter(); |
| converter.addComponent(label, new GridConstraints(0,0,1,1,GridConstraints.ANCHOR_CENTER,GridConstraints.FILL_BOTH, |
| GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, new Dimension(0,0), null, null)); |
| |
| converter.addComponent(field1, new GridConstraints(0,1,1,2,GridConstraints.ANCHOR_CENTER,GridConstraints.FILL_BOTH, |
| GridConstraints.SIZEPOLICY_WANT_GROW, GridConstraints.SIZEPOLICY_FIXED, new Dimension(0,0), null, null)); |
| |
| converter.addComponent(field2, new GridConstraints(1,0,1,2,GridConstraints.ANCHOR_CENTER,GridConstraints.FILL_BOTH, |
| GridConstraints.SIZEPOLICY_WANT_GROW, GridConstraints.SIZEPOLICY_FIXED, new Dimension(0,0), null, null)); |
| |
| applyConversionResults(panel, converter); |
| final Dimension preferredSize = panel.getPreferredSize(); |
| assertEquals(110, preferredSize.width); |
| assertEquals(60, preferredSize.height); |
| } |
| */ |
| |
| public void testLayout7() { |
| final JPanel panel = new JPanel(new GridBagLayout()); |
| |
| final JLabel label = new JLabel(); |
| label.setPreferredSize(new Dimension(50,10)); |
| |
| final JTextField field = new JTextField(); |
| field.setPreferredSize(new Dimension(100,10)); |
| |
| final JTextField scroll = new JTextField(); |
| scroll.setPreferredSize(new Dimension(503, 10)); |
| |
| GridBagConverter converter = new GridBagConverter(); |
| converter.addComponent(label, new GridConstraints(0,0,1,1,GridConstraints.ANCHOR_CENTER,GridConstraints.FILL_BOTH, |
| GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, new Dimension(0,0), null, null, 0)); |
| |
| converter.addComponent(field, new GridConstraints(0,1,1,1,GridConstraints.ANCHOR_CENTER,GridConstraints.FILL_BOTH, |
| GridConstraints.SIZEPOLICY_WANT_GROW, GridConstraints.SIZEPOLICY_FIXED, new Dimension(0,0), null, null, 0)); |
| |
| converter.addComponent(scroll, new GridConstraints(1,0,1,2,GridConstraints.ANCHOR_CENTER,GridConstraints.FILL_BOTH, |
| GridConstraints.SIZEPOLICY_WANT_GROW, GridConstraints.SIZEPOLICY_FIXED, new Dimension(0,0), null, null, 0)); |
| |
| applyConversionResults(panel, converter); |
| |
| assertEquals(503, panel.getMinimumSize().width); |
| assertEquals(503, panel.getPreferredSize().width); |
| |
| panel.setSize(503, 100); |
| panel.doLayout(); |
| |
| assertEquals(50, label.getWidth()); |
| assertEquals(453, field.getWidth()); |
| } |
| |
| public void testLayout8() { |
| final JPanel panel = new JPanel(new GridBagLayout()); |
| |
| final JLabel label1 = new JLabel(); |
| label1.setMinimumSize(new Dimension(10,10)); |
| label1.setPreferredSize(new Dimension(100,10)); |
| |
| final JLabel label2 = new JLabel(); |
| label2.setMinimumSize(new Dimension(10,10)); |
| label2.setPreferredSize(new Dimension(100,10)); |
| |
| GridBagConverter converter = new GridBagConverter(); |
| converter.addComponent(label1, new GridConstraints(0,0,1,1,GridConstraints.ANCHOR_CENTER,GridConstraints.FILL_BOTH, |
| GridConstraints.SIZEPOLICY_CAN_SHRINK + GridConstraints.SIZEPOLICY_CAN_GROW, |
| GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0)); |
| |
| converter.addComponent(label2, new GridConstraints(0,1,1,1,GridConstraints.ANCHOR_CENTER,GridConstraints.FILL_BOTH, |
| GridConstraints.SIZEPOLICY_CAN_SHRINK, |
| GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0)); |
| |
| converter.addComponent(new JLabel(), new GridConstraints(1,0,1,2,GridConstraints.ANCHOR_CENTER,GridConstraints.FILL_BOTH, |
| GridConstraints.SIZEPOLICY_CAN_SHRINK + GridConstraints.SIZEPOLICY_CAN_GROW + GridConstraints.SIZEPOLICY_WANT_GROW, |
| GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(150, -1), null, 0)); |
| applyConversionResults(panel, converter); |
| |
| assertEquals(20, panel.getMinimumSize().width); |
| assertEquals(200, panel.getPreferredSize().width); |
| |
| // minimum |
| panel.setSize(20, 100); |
| panel.doLayout(); |
| assertEquals(10, label1.getWidth()); |
| assertEquals(10, label2.getWidth()); |
| |
| // between min and pref |
| /* TODO[yole]: GridBag honors weights in this situation, and GridLayout distributes evenly |
| panel.setSize(76, 100); |
| panel.doLayout(); |
| assertEquals(38, label1.getWidth()); |
| assertEquals(38, label2.getWidth()); |
| */ |
| |
| // pref-1 |
| /* TODO[yole]: investigate |
| panel.setSize(199, 100); |
| panel.doLayout(); |
| assertEquals(100, label1.getWidth()); |
| assertEquals(99, label2.getWidth()); |
| */ |
| |
| // pref |
| panel.setSize(200, 100); |
| panel.doLayout(); |
| assertEquals(100, label1.getWidth()); |
| assertEquals(100, label2.getWidth()); |
| |
| // pref+1 |
| panel.setSize(201, 100); |
| panel.doLayout(); |
| assertEquals(101, label1.getWidth()); |
| assertEquals(100, label2.getWidth()); |
| |
| // pref + few |
| panel.setSize(205, 100); |
| panel.doLayout(); |
| assertEquals(105, label1.getWidth()); |
| assertEquals(100, label2.getWidth()); |
| } |
| |
| public void testPrefSize1() { |
| final JPanel panel = new JPanel(new GridBagLayout()); |
| |
| final JTextField field1 = new JTextField(); |
| field1.setMinimumSize(new Dimension(110,10)); |
| field1.setPreferredSize(new Dimension(120,10)); |
| |
| final JTextField field2 = new JTextField(); |
| field2.setMinimumSize(new Dimension(215,10)); |
| field2.setPreferredSize(new Dimension(225,10)); |
| |
| GridBagConverter converter = new GridBagConverter(); |
| converter.addComponent(field1, new GridConstraints(0,0,1,1,GridConstraints.ANCHOR_CENTER,GridConstraints.FILL_BOTH, |
| GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0)); |
| |
| converter.addComponent(field2, new GridConstraints(0,1,1,1,GridConstraints.ANCHOR_CENTER,GridConstraints.FILL_BOTH, |
| GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0)); |
| |
| applyConversionResults(panel, converter); |
| |
| final Dimension preferredSize = panel.getPreferredSize(); |
| assertEquals(345, preferredSize.width); |
| |
| final Dimension minSize = panel.getMinimumSize(); |
| assertEquals(325, minSize.width); |
| |
| panel.setSize(preferredSize.width, preferredSize.height); |
| panel.doLayout(); |
| |
| assertEquals(120, field1.getWidth()); |
| assertEquals(225, field2.getWidth()); |
| |
| panel.setSize(400, panel.getWidth()); |
| panel.invalidate(); // to invalidate layout |
| panel.doLayout(); |
| } |
| |
| /* TODO[yole]: this relies on strange myMinCellSize logic |
| public void testPrefSize2() { |
| final JPanel panel = new JPanel(new GridBagLayout()); |
| |
| final JTextField field1 = new JTextField(); |
| field1.setPreferredSize(new Dimension(100,10)); |
| |
| final JTextField field2 = new JTextField(); |
| field2.setPreferredSize(new Dimension(200,10)); |
| |
| GridBagConverter converter = new GridBagConverter(); |
| converter.addComponent(field1, new GridConstraints(0,0,1,1,GridConstraints.ANCHOR_CENTER,GridConstraints.FILL_BOTH, |
| GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null)); |
| |
| converter.addComponent(field2, new GridConstraints(0,1,1,1,GridConstraints.ANCHOR_CENTER,GridConstraints.FILL_BOTH, |
| GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null)); |
| |
| applyConversionResults(panel, converter); |
| |
| final Dimension preferredSize = panel.getPreferredSize(); |
| assertEquals(300 + 20, preferredSize.width); |
| |
| panel.setSize(preferredSize.width, preferredSize.height); |
| panel.doLayout(); |
| |
| assertEquals(100, field1.getWidth()); |
| assertEquals(200, field2.getWidth()); |
| |
| panel.setSize(270, preferredSize.height); |
| panel.doLayout(); // should not fail |
| } |
| */ |
| |
| /** |
| * button(can grow) | text field (want grow) |
| * text field (want grow, span 2) |
| */ |
| public void testSpans1() { |
| final JPanel panel = new JPanel(new GridBagLayout()); |
| |
| final JButton button = new JButton(); |
| button.setPreferredSize(new Dimension(50, 10)); |
| |
| final JTextField field1 = new JTextField(); |
| field1.setPreferredSize(new Dimension(50, 10)); |
| |
| final JTextField field2 = new JTextField(); |
| |
| GridBagConverter converter = new GridBagConverter(); |
| converter.addComponent(button, new GridConstraints(0,0,1,1,GridConstraints.ANCHOR_CENTER,GridConstraints.FILL_HORIZONTAL, |
| GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0)); |
| |
| converter.addComponent(field1, new GridConstraints(0,1,1,1,GridConstraints.ANCHOR_CENTER,GridConstraints.FILL_HORIZONTAL, |
| GridConstraints.SIZEPOLICY_WANT_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0)); |
| |
| converter.addComponent(field2, new GridConstraints(1,0,1,2,GridConstraints.ANCHOR_CENTER,GridConstraints.FILL_HORIZONTAL, |
| GridConstraints.SIZEPOLICY_WANT_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0)); |
| |
| applyConversionResults(panel, converter); |
| |
| final Dimension preferredSize = panel.getPreferredSize(); |
| assertEquals(100, preferredSize.width); |
| |
| panel.setSize(new Dimension(500, 100)); |
| panel.doLayout(); |
| |
| assertEquals(500, field2.getWidth()); |
| assertEquals(50, button.getWidth()); |
| assertEquals(450, field1.getWidth()); |
| } |
| |
| /** |
| * button(can grow) | text field (can grow) |
| * text field (want grow, span 2) |
| */ |
| public void testSpans2() { |
| final JPanel panel = new JPanel(new GridBagLayout()); |
| |
| final JButton button = new JButton(); |
| button.setPreferredSize(new Dimension(50, 10)); |
| |
| final JTextField field1 = new JTextField(); |
| field1.setPreferredSize(new Dimension(50, 10)); |
| |
| final JTextField field2 = new JTextField(); |
| |
| GridBagConverter converter = new GridBagConverter(); |
| converter.addComponent(button, new GridConstraints(0,0,1,1,GridConstraints.ANCHOR_CENTER,GridConstraints.FILL_HORIZONTAL, |
| GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0)); |
| |
| converter.addComponent(field1, new GridConstraints(0,1,1,1,GridConstraints.ANCHOR_CENTER,GridConstraints.FILL_HORIZONTAL, |
| GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0)); |
| |
| converter.addComponent(field2, new GridConstraints(1,0,1,2,GridConstraints.ANCHOR_CENTER,GridConstraints.FILL_HORIZONTAL, |
| GridConstraints.SIZEPOLICY_WANT_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0)); |
| |
| applyConversionResults(panel, converter); |
| |
| final Dimension preferredSize = panel.getPreferredSize(); |
| assertEquals(100, preferredSize.width); |
| |
| panel.setSize(new Dimension(500, 100)); |
| panel.doLayout(); |
| |
| assertEquals(500, field2.getWidth()); |
| assertEquals(250, button.getWidth()); |
| assertEquals(250, field1.getWidth()); |
| } |
| |
| /** |
| * button(can grow) | text field (want grow, span 2) |
| */ |
| public void testSpans3() { |
| final JPanel panel = new JPanel(new GridBagLayout()); |
| |
| final JButton button = new JButton(); |
| button.setPreferredSize(new Dimension(50, 10)); |
| |
| final JTextField field1 = new JTextField(); |
| field1.setPreferredSize(new Dimension(110, 10)); |
| |
| GridBagConverter converter = new GridBagConverter(); |
| converter.addComponent(button, new GridConstraints(0,0,1,1,GridConstraints.ANCHOR_CENTER,GridConstraints.FILL_HORIZONTAL, |
| GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0)); |
| |
| converter.addComponent(field1, new GridConstraints(0,1,1,2,GridConstraints.ANCHOR_CENTER,GridConstraints.FILL_HORIZONTAL, |
| GridConstraints.SIZEPOLICY_WANT_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0)); |
| |
| applyConversionResults(panel, converter); |
| |
| final Dimension preferredSize = panel.getPreferredSize(); |
| assertEquals(160, preferredSize.width); |
| |
| panel.setSize(new Dimension(500, 100)); |
| panel.doLayout(); |
| |
| assertEquals(50, button.getWidth()); |
| assertEquals(450, field1.getWidth()); |
| } |
| |
| /** |
| * button (can grow, span 2 ) | text field 1 (span 1) |
| * text field 2 (want grow, span 2) | empty |
| */ |
| public void testSpans4() { |
| final JPanel panel = new JPanel(new GridBagLayout()); |
| |
| final JButton button = new JButton(); |
| button.setPreferredSize(new Dimension(50, 10)); |
| |
| final JTextField field1 = new JTextField(); |
| field1.setPreferredSize(new Dimension(110, 10)); |
| |
| final JTextField field2 = new JTextField(); |
| field2.setPreferredSize(new Dimension(110, 10)); |
| |
| GridBagConverter converter = new GridBagConverter(); |
| converter.addComponent(button, new GridConstraints(0,0,1,2,GridConstraints.ANCHOR_CENTER,GridConstraints.FILL_HORIZONTAL, |
| GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0)); |
| |
| converter.addComponent(field1, new GridConstraints(0,2,1,1,GridConstraints.ANCHOR_CENTER,GridConstraints.FILL_HORIZONTAL, |
| GridConstraints.SIZEPOLICY_WANT_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0)); |
| |
| converter.addComponent(field2, new GridConstraints(1,0,1,2,GridConstraints.ANCHOR_CENTER,GridConstraints.FILL_HORIZONTAL, |
| GridConstraints.SIZEPOLICY_WANT_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0)); |
| |
| applyConversionResults(panel, converter); |
| |
| final Dimension preferredSize = panel.getPreferredSize(); |
| assertEquals(220, preferredSize.width); |
| |
| panel.setSize(new Dimension(500, 100)); |
| panel.doLayout(); |
| |
| assertEquals(250, button.getWidth()); |
| assertEquals(250, field1.getWidth()); |
| assertEquals(250, field2.getWidth()); |
| } |
| |
| /** |
| * label | label |
| * text area (span 2) |
| */ |
| public void testTextAreas1() { |
| final JPanel panel = new JPanel(new GridBagLayout()); |
| |
| final JLabel label1 = new JLabel(); |
| label1.setPreferredSize(new Dimension(15,20)); |
| final JLabel label2 = new JLabel(); |
| label2.setPreferredSize(new Dimension(15,20)); |
| final JTextArea textArea = new JTextArea(); |
| textArea.setLineWrap(true); |
| |
| GridBagConverter converter = new GridBagConverter(); |
| converter.addComponent(label1, new GridConstraints(0,0,1,1,GridConstraints.ANCHOR_CENTER,GridConstraints.FILL_HORIZONTAL, |
| GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0)); |
| |
| converter.addComponent(label2, new GridConstraints(0,1,1,1,GridConstraints.ANCHOR_CENTER,GridConstraints.FILL_HORIZONTAL, |
| GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0)); |
| |
| converter.addComponent(textArea, new GridConstraints(1,0,1,2,GridConstraints.ANCHOR_CENTER,GridConstraints.FILL_BOTH, |
| GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, |
| GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, null, null, null, 0)); |
| |
| applyConversionResults(panel, converter); |
| |
| assertEquals(100, textArea.getPreferredSize().width); |
| |
| final Dimension initialPreferredSize = panel.getPreferredSize(); |
| assertEquals(new Dimension(100,20 + textArea.getPreferredSize().height), initialPreferredSize); |
| |
| panel.setSize(initialPreferredSize); |
| panel.invalidate(); |
| panel.doLayout(); |
| |
| assertEquals(initialPreferredSize, panel.getPreferredSize()); |
| } |
| |
| /** |
| * textfield1 | textfield2 |
| * textfield3 (span 2) |
| * |
| * important: hspan should be greater than 0 |
| */ |
| public void testTextAreas2() { |
| final JPanel panel = new JPanel(/*new GridLayoutManager(2,2, new Insets(0,0,0,0), 11, 0)*/ new GridBagLayout()); |
| |
| final JTextField field1 = new JTextField(); |
| field1.setPreferredSize(new Dimension(15,20)); |
| final JTextField field2 = new JTextField(); |
| field2.setPreferredSize(new Dimension(15,20)); |
| final JTextField field3 = new JTextField(); |
| field3.setPreferredSize(new Dimension(100,20)); |
| |
| GridBagConverter converter = new GridBagConverter(); |
| converter.addComponent(field1, new GridConstraints(0,0,1,1,GridConstraints.ANCHOR_CENTER,GridConstraints.FILL_HORIZONTAL, |
| GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0)); |
| |
| converter.addComponent(field2, new GridConstraints(0,1,1,1,GridConstraints.ANCHOR_CENTER,GridConstraints.FILL_HORIZONTAL, |
| GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0)); |
| |
| converter.addComponent(field3, new GridConstraints(1,0,1,2,GridConstraints.ANCHOR_CENTER,GridConstraints.FILL_BOTH, |
| GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0)); |
| |
| applyConversionResults(panel, converter); |
| |
| assertEquals(100, panel.getPreferredSize().width); |
| } |
| |
| public void testGaps1() { |
| final JPanel panel = new JPanel(new GridBagLayout()); |
| |
| final JTextField field1 = new JTextField(); |
| field1.setPreferredSize(new Dimension(100,20)); |
| final JTextField field2 = new JTextField(); |
| field2.setPreferredSize(new Dimension(100,20)); |
| |
| GridBagConverter converter = new GridBagConverter(new Insets(0, 0, 0, 0), 10, 0, false, false); |
| converter.addComponent(field1, new GridConstraints(0,0,1,1,GridConstraints.ANCHOR_CENTER,GridConstraints.FILL_HORIZONTAL, |
| GridConstraints.SIZEPOLICY_WANT_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0)); |
| |
| converter.addComponent(field2, new GridConstraints(0,1,1,1,GridConstraints.ANCHOR_CENTER,GridConstraints.FILL_HORIZONTAL, |
| GridConstraints.SIZEPOLICY_WANT_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0)); |
| |
| applyConversionResults(panel, converter); |
| |
| final Dimension preferredSize = panel.getPreferredSize(); |
| assertEquals(210, preferredSize.width); |
| } |
| |
| /** |
| * field (span 2) | field (span 1) |
| */ |
| public void testGaps2() { |
| final JPanel panel = new JPanel(new GridBagLayout()); |
| |
| final JTextField field1 = new JTextField(); |
| field1.setPreferredSize(new Dimension(100,20)); |
| final JTextField field2 = new JTextField(); |
| field2.setPreferredSize(new Dimension(100,20)); |
| |
| GridBagConverter converter = new GridBagConverter(new Insets(0, 0, 0, 0), 7, 0, false, false); |
| converter.addComponent(field1, new GridConstraints(0,0,1,2,GridConstraints.ANCHOR_CENTER,GridConstraints.FILL_HORIZONTAL, |
| GridConstraints.SIZEPOLICY_WANT_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0)); |
| |
| converter.addComponent(field2, new GridConstraints(0,2,1,1,GridConstraints.ANCHOR_CENTER,GridConstraints.FILL_HORIZONTAL, |
| GridConstraints.SIZEPOLICY_WANT_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0)); |
| |
| applyConversionResults(panel, converter); |
| |
| final Dimension preferredSize = panel.getPreferredSize(); |
| assertEquals(207, preferredSize.width); |
| |
| panel.setSize(panel.getPreferredSize()); |
| panel.doLayout(); |
| |
| assertEquals(new Rectangle(0,0,100,20), field1.getBounds()); |
| assertEquals(new Rectangle(107,0,100,20), field2.getBounds()); |
| } |
| |
| /** |
| * |
| * btn1 | btn2 | btn4 |
| * btn3 (span 2) | |
| */ |
| public void testGaps3() { |
| final JPanel panel = new JPanel(new GridBagLayout()); |
| |
| final JButton btn1 = new JButton(); |
| btn1.setPreferredSize(new Dimension(100,20)); |
| final JButton btn2 = new JButton(); |
| btn2.setPreferredSize(new Dimension(100,20)); |
| final JButton btn3 = new JButton(); |
| btn3.setPreferredSize(new Dimension(100,20)); |
| final JButton btn4 = new JButton(); |
| btn4.setPreferredSize(new Dimension(100,20)); |
| |
| GridBagConverter converter = new GridBagConverter(new Insets(0, 0, 0, 0), 7, 0, false, false); |
| converter.addComponent(btn1, new GridConstraints(0,0,1,1,GridConstraints.ANCHOR_CENTER,GridConstraints.FILL_HORIZONTAL, |
| GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0)); |
| |
| converter.addComponent(btn2, new GridConstraints(0,1,1,1,GridConstraints.ANCHOR_CENTER,GridConstraints.FILL_HORIZONTAL, |
| GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0)); |
| |
| converter.addComponent(btn3, new GridConstraints(1,0,1,2,GridConstraints.ANCHOR_CENTER,GridConstraints.FILL_HORIZONTAL, |
| GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0)); |
| |
| converter.addComponent(btn4, new GridConstraints(0,2,1,1,GridConstraints.ANCHOR_CENTER,GridConstraints.FILL_HORIZONTAL, |
| GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0)); |
| |
| applyConversionResults(panel, converter); |
| |
| final Dimension preferredSize = panel.getPreferredSize(); |
| assertEquals(314, preferredSize.width); |
| |
| panel.setSize(panel.getPreferredSize()); |
| panel.doLayout(); |
| } |
| |
| /** |
| * |
| * btn1 | btn2 | btn4 |
| * btn3 (span 2) | |
| */ |
| public void testGaps3a() { |
| final JPanel panel = new JPanel(new GridBagLayout()); |
| |
| final JButton btn1 = new JButton(); |
| btn1.setPreferredSize(new Dimension(100,20)); |
| final JButton btn2 = new JButton(); |
| btn2.setPreferredSize(new Dimension(100,20)); |
| final JButton btn3 = new JButton(); |
| btn3.setPreferredSize(new Dimension(100,20)); |
| final JButton btn4 = new JButton(); |
| btn4.setPreferredSize(new Dimension(100,20)); |
| |
| GridBagConverter converter = new GridBagConverter(new Insets(0, 0, 0, 0), 1000, 0, false, false); |
| converter.addComponent(btn1, new GridConstraints(0,0,1,1,GridConstraints.ANCHOR_CENTER,GridConstraints.FILL_HORIZONTAL, |
| GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0)); |
| |
| converter.addComponent(btn2, new GridConstraints(0,1,1,1,GridConstraints.ANCHOR_CENTER,GridConstraints.FILL_HORIZONTAL, |
| GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0)); |
| |
| converter.addComponent(btn3, new GridConstraints(1,0,1,2,GridConstraints.ANCHOR_CENTER,GridConstraints.FILL_HORIZONTAL, |
| GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0)); |
| |
| converter.addComponent(btn4, new GridConstraints(0,2,1,1,GridConstraints.ANCHOR_CENTER,GridConstraints.FILL_HORIZONTAL, |
| GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0)); |
| |
| applyConversionResults(panel, converter); |
| |
| final Dimension preferredSize = panel.getPreferredSize(); |
| assertEquals(2300, preferredSize.width); |
| |
| panel.setSize(panel.getPreferredSize()); |
| panel.doLayout(); |
| } |
| |
| /** |
| * |
| * btn1 | btn2 |
| * btn3 (span 2) |
| */ |
| public void testGaps3b() { |
| final JPanel panel = new JPanel(new GridBagLayout()); |
| |
| final JButton btn1 = new JButton(); |
| btn1.setPreferredSize(new Dimension(100,20)); |
| final JButton btn2 = new JButton(); |
| btn2.setPreferredSize(new Dimension(100,20)); |
| final JButton btn3 = new JButton(); |
| btn3.setPreferredSize(new Dimension(100,20)); |
| |
| GridBagConverter converter = new GridBagConverter(new Insets(0, 0, 0, 0), 1000, 0, false, false); |
| converter.addComponent(btn1, new GridConstraints(0,0,1,1,GridConstraints.ANCHOR_CENTER,GridConstraints.FILL_HORIZONTAL, |
| GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0)); |
| |
| converter.addComponent(btn2, new GridConstraints(0,1,1,1,GridConstraints.ANCHOR_CENTER,GridConstraints.FILL_HORIZONTAL, |
| GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0)); |
| |
| converter.addComponent(btn3, new GridConstraints(1,0,1,2,GridConstraints.ANCHOR_CENTER,GridConstraints.FILL_HORIZONTAL, |
| GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0)); |
| |
| applyConversionResults(panel, converter); |
| |
| final Dimension preferredSize = panel.getPreferredSize(); |
| assertEquals(1200, preferredSize.width); |
| |
| panel.setSize(panel.getPreferredSize()); |
| panel.doLayout(); |
| } |
| |
| /** |
| * btn1 |
| * ----- |
| * empty |
| * ---- |
| * btn2 |
| */ |
| public void testGaps4() { |
| final JPanel panel = new JPanel(new GridBagLayout()); |
| |
| final JButton btn1 = new JButton(); |
| btn1.setPreferredSize(new Dimension(100,20)); |
| final JButton btn2 = new JButton(); |
| btn2.setPreferredSize(new Dimension(100,20)); |
| |
| GridBagConverter converter = new GridBagConverter(new Insets(0, 0, 0, 0), 0, 7, false, false); |
| converter.addComponent(btn1, new GridConstraints(0,0,1,1,GridConstraints.ANCHOR_CENTER,GridConstraints.FILL_HORIZONTAL, |
| GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0)); |
| |
| converter.addComponent(btn2, new GridConstraints(2,0,1,1,GridConstraints.ANCHOR_CENTER,GridConstraints.FILL_HORIZONTAL, |
| GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0)); |
| |
| applyConversionResults(panel, converter); |
| |
| final Dimension preferredSize = panel.getPreferredSize(); |
| assertEquals(47, preferredSize.height); |
| |
| panel.setSize(panel.getPreferredSize()); |
| panel.doLayout(); |
| } |
| |
| // skipped GapsTest.test5 because its only difference from test4 is spacer usage |
| |
| public void testGaps6() { |
| final JPanel panel = new JPanel(new GridBagLayout()); |
| |
| final JButton btn1 = new JButton(); |
| btn1.setPreferredSize(new Dimension(100,20)); |
| final JButton btn2 = new JButton(); |
| btn2.setPreferredSize(new Dimension(100,20)); |
| |
| GridBagConverter converter = new GridBagConverter(new Insets(0, 0, 0, 0), 0, 500, false, false); |
| converter.addComponent(btn1, new GridConstraints(0,0,1,1,GridConstraints.ANCHOR_CENTER,GridConstraints.FILL_HORIZONTAL, |
| GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0)); |
| |
| converter.addComponent(btn2, new GridConstraints(1,0,1,1,GridConstraints.ANCHOR_CENTER,GridConstraints.FILL_HORIZONTAL, |
| GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0)); |
| |
| applyConversionResults(panel, converter); |
| |
| final Dimension preferredSize = panel.getPreferredSize(); |
| assertEquals(540, preferredSize.height); |
| |
| panel.setSize(panel.getPreferredSize()); |
| panel.doLayout(); // should not crash |
| } |
| |
| public void testEqualSizeCells1() { |
| final JPanel panel = new JPanel(new GridBagLayout()); |
| |
| final JTextField field1 = new JTextField(); |
| field1.setMinimumSize(new Dimension(5,20)); |
| field1.setPreferredSize(new Dimension(10,20)); |
| |
| final JTextField field2 = new JTextField(); |
| field2.setMinimumSize(new Dimension(25,20)); |
| field2.setPreferredSize(new Dimension(50,20)); |
| |
| final JTextField field3 = new JTextField(); |
| field3.setMinimumSize(new Dimension(70,20)); |
| field3.setPreferredSize(new Dimension(100,20)); |
| |
| GridBagConverter converter = new GridBagConverter(new Insets(0, 0, 0, 0), 7, 0, true, false); |
| converter.addComponent(field1, new GridConstraints(0,0,1,1,GridConstraints.ANCHOR_CENTER,GridConstraints.FILL_BOTH, |
| GridConstraints.SIZEPOLICY_WANT_GROW | GridConstraints.SIZEPOLICY_CAN_SHRINK, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0)); |
| |
| converter.addComponent(field2, new GridConstraints(0,1,1,1,GridConstraints.ANCHOR_CENTER,GridConstraints.FILL_BOTH, |
| GridConstraints.SIZEPOLICY_WANT_GROW | GridConstraints.SIZEPOLICY_CAN_SHRINK, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0)); |
| |
| converter.addComponent(field3, new GridConstraints(0,2,1,1,GridConstraints.ANCHOR_CENTER,GridConstraints.FILL_BOTH, |
| GridConstraints.SIZEPOLICY_WANT_GROW | GridConstraints.SIZEPOLICY_CAN_SHRINK, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0)); |
| |
| applyConversionResults(panel, converter); |
| |
| final Dimension minimumSize = panel.getMinimumSize(); |
| assertEquals(70 + 7 + 70 + 7 + 70, minimumSize.width); |
| |
| final Dimension preferredSize = panel.getPreferredSize(); |
| assertEquals(100 + 7 + 100 + 7 + 100, preferredSize.width); |
| |
| // |
| panel.setSize(panel.getPreferredSize()); |
| panel.doLayout(); |
| |
| assertEquals(100, field1.getWidth()); |
| assertEquals(100, field2.getWidth()); |
| assertEquals(100, field3.getWidth()); |
| |
| // |
| panel.setSize(new Dimension(1000, 1000)); |
| panel.doLayout(); |
| |
| assertEquals(329, field1.getWidth(), 1.0); |
| assertEquals(329, field2.getWidth(), 1.0); |
| assertEquals(328, field3.getWidth(), 1.0); |
| } |
| |
| public void testEqualSizeCells2() { |
| final JPanel panel = new JPanel(new GridBagLayout()); |
| |
| final JTextField field1 = new JTextField(); |
| field1.setMinimumSize(new Dimension(20, 5)); |
| field1.setPreferredSize(new Dimension(20, 10)); |
| |
| final JTextField field2 = new JTextField(); |
| field2.setMinimumSize(new Dimension(20, 25)); |
| field2.setPreferredSize(new Dimension(20, 50)); |
| |
| final JTextField field3 = new JTextField(); |
| field3.setMinimumSize(new Dimension(20, 70)); |
| field3.setPreferredSize(new Dimension(20, 100)); |
| |
| GridBagConverter converter = new GridBagConverter(new Insets(0, 0, 0, 0), 0, 7, false, true); |
| converter.addComponent(field1, new GridConstraints(0,0,1,1,GridConstraints.ANCHOR_CENTER,GridConstraints.FILL_BOTH, |
| GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_WANT_GROW | GridConstraints.SIZEPOLICY_CAN_SHRINK, null, null, null, 0)); |
| |
| converter.addComponent(field2, new GridConstraints(1,0,1,1,GridConstraints.ANCHOR_CENTER,GridConstraints.FILL_BOTH, |
| GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_WANT_GROW | GridConstraints.SIZEPOLICY_CAN_SHRINK, null, null, null, 0)); |
| |
| converter.addComponent(field3, new GridConstraints(2,0,1,1,GridConstraints.ANCHOR_CENTER,GridConstraints.FILL_BOTH, |
| GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_WANT_GROW | GridConstraints.SIZEPOLICY_CAN_SHRINK, null, null, null, 0)); |
| |
| applyConversionResults(panel, converter); |
| |
| final Dimension minimumSize = panel.getMinimumSize(); |
| assertEquals(70 + 7 + 70 + 7 + 70, minimumSize.height); |
| |
| final Dimension preferredSize = panel.getPreferredSize(); |
| assertEquals(100 + 7 + 100 + 7 + 100, preferredSize.height); |
| |
| panel.setSize(panel.getPreferredSize()); |
| panel.doLayout(); |
| |
| assertEquals(100, field1.getHeight()); |
| assertEquals(100, field2.getHeight()); |
| assertEquals(100, field3.getHeight()); |
| } |
| |
| private static void applyConversionResults(final JPanel panel, final GridBagConverter converter) { |
| GridBagConverter.Result[] results = converter.convert(); |
| for(int i=0; i<results.length; i++) { |
| GridBagConverter.Result result = results [i]; |
| JComponent component = result.isFillerPanel ? new JPanel() : result.component; |
| if (result.minimumSize != null) { |
| component.setMinimumSize(result.minimumSize); |
| } |
| if (result.preferredSize != null) { |
| component.setPreferredSize(result.preferredSize); |
| } |
| panel.add(component, result.constraints); |
| } |
| } |
| } |