0

只是一个快速的问题。

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

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

4

2 回答 2

3

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

于 2013-01-05T18:01:16.713 回答
2

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

在此处输入图像描述   在此处输入图像描述

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";
      }
   }
}
于 2013-01-05T19:02:44.810 回答