【问题标题】:Java Swing - Grouped ComponentJava Swing - 分组组件
【发布时间】:2013-01-06 03:02:44
【问题描述】:

只是一个简单的问题。

我正在做一个涉及 jTextfield、jButton、jLabels 的 GUI。 是否可以将这 3 个组件分组并隐藏。只有点击一个jButton,这3个组件才会出现?

按钮创建新组件的类似用法,但在这种情况下,我希望在单击 jButton 时隐藏和取消隐藏。

【问题讨论】:

  • 将它们添加到 JPanel 并显示/隐藏面板。

标签: java swing


【解决方案1】:

您可以将所有组件添加到 JPanel 并更改面板的可见性。 执行此操作时,您应该考虑在组件不可见时不使用空间的布局。您可以使用 MigLayout 并设置 hideMode 3。

【讨论】:

    【解决方案2】:

    这是一个代码示例,展示了如何显示/隐藏分组组件,正如其他人所建议的那样,它被实现为 JPanelGroupedComponent 即使在隐藏时也能保持其大小。

    import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.FlowLayout;
    import java.awt.GridLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.JTextField;
    import javax.swing.SwingUtilities;
    import javax.swing.border.CompoundBorder;
    import javax.swing.border.EmptyBorder;
    import javax.swing.border.LineBorder;
    
    public class SimpleTest extends JFrame {
       GroupedComponent test = new GroupedComponent("one", "two", "three");
    
       public SimpleTest() {
          super("GroupedComponent Example");
    
          JPanel content = (JPanel)getContentPane();
          content.setLayout(new FlowLayout(FlowLayout.CENTER, 10, 10));
    
          final JButton hideButton = new JButton(test.getButtonText());
          hideButton.setPreferredSize(new Dimension(100,hideButton.getPreferredSize().height));
          hideButton.addActionListener(new ActionListener() {
             public void actionPerformed(ActionEvent e) {
                test.toggle();
                hideButton.setText(test.getButtonText());
             }
          });
    
          content.add(hideButton);
          content.add(test);
       }
    
       public static void main(String[] argv) {
          SwingUtilities.invokeLater(new Runnable() {
             public void run() {
                SimpleTest c = new SimpleTest();
                c.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                c.pack();
                c.setVisible(true);
             }
          });
       }
    
       class GroupedComponent extends JPanel {
          boolean visible = true;
          JTextField field;
          JButton button;
          JLabel label;
    
          GroupedComponent(String fieldText, String buttonText, String labelText) {
             super(new GridLayout(1, 3, 4, 4));
    
             field = new JTextField(fieldText);
             button = new JButton(buttonText);
             label = new JLabel(labelText);
    
             add(field);
             add(button);
             add(label);
    
             setBorder(new CompoundBorder(new LineBorder(Color.lightGray), new EmptyBorder(4,4,4,4)));
          }
    
          void toggle() {
             if(visible) {
                visible = false;
                field.setVisible(false);
                button.setVisible(false);
                label.setVisible(false);
             } else {
                visible = true;
                field.setVisible(true);
                button.setVisible(true);
                label.setVisible(true);
             }
          }
    
          String getButtonText() {
             return visible ? "Hide" : "Show";
          }
       }
    }
    

    【讨论】:

      猜你喜欢
      • 2011-06-04
      • 2013-12-13
      • 1970-01-01
      • 1970-01-01
      • 2011-09-03
      • 2011-02-17
      • 2011-06-26
      • 2011-03-12
      • 1970-01-01
      相关资源
      最近更新 更多