0

このコードのいくつかのコンテキスト、私がやろうとしているのは、入力に値として "" が含まれている場合に検証警告を作成することです。そのため、エラーが表示された場合はメッセージが表示されます。有効な場合はメッセージが表示されないので、textField が有効な場合にメッセージを削除するにはどうすればよいですか?

メッセージは、テキストを含む JLabel を含む JPanel です。有効でない場合はこの JPanel をフレームに追加し、有効な場合は削除しようとしています。

それで、私はここで何が間違っていますか?私は Swing の基本レベルです。

import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JLabel;
import javax.swing.JTextField;
import java.awt.Color;
import java.awt.Font;
import javax.swing.JButton;
import java.awt.event.ItemListener;
import java.awt.event.ItemEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

public class Test {

        private JFrame frame;
        private JTextField textField;
        private JTextField textField_1;

        /**
         * Launch the application.
         */
        public static void main(String[] args) {
                EventQueue.invokeLater(new Runnable() {
                        public void run() {
                                try {
                                        Test window = new Test();
                                        window.frame.setVisible(true);
                                } catch (Exception e) {
                                        e.printStackTrace();
                                }
                        }
                });
        }

        /**
         * Create the application.
         */
        public Test() {
                initialize();
        }

        /**
         * Initialize the contents of the frame.
         */
        private void initialize() {
                frame = new JFrame();
                frame.setBounds(100, 100, 401, 232);
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.getContentPane().setLayout(null);

                JPanel panel = new JPanel();
                panel.setBounds(10, 11, 330, 94);
                frame.getContentPane().add(panel);
                panel.setLayout(null);

                JLabel lblNewLabel = new JLabel("Firstname :");
                lblNewLabel.setBounds(10, 11, 104, 14);
                panel.add(lblNewLabel);

                textField = new JTextField();
                textField.setBounds(76, 8, 244, 20);
                panel.add(textField);
                textField.setColumns(10);

                JLabel lblLastname = new JLabel("Lastname :");
                lblLastname.setBounds(10, 42, 78, 14);
                panel.add(lblLastname);

                textField_1 = new JTextField();
                textField_1.setBounds(76, 39, 244, 20);
                panel.add(textField_1);
                textField_1.setColumns(10);

                JButton btnValidate = new JButton("Validate");
                btnValidate.addMouseListener(new MouseAdapter() {
                        @SuppressWarnings("deprecation")
                        @Override
                        public void mousePressed(MouseEvent arg0) {
                                JPanel panel_1 = new JPanel();
                                JPanel panel_2 = new JPanel();

                                if(textField.getText().equals("")) {

                                        panel_1.setBackground(new Color(30, 144, 255));
                                        panel_1.setBounds(100, 116, 330, 26);

                                        JLabel lblMessage = new JLabel("0 :");
                                        lblMessage.setForeground(new Color(255, 255, 255));
                                        lblMessage.setFont(new Font("Tahoma", Font.BOLD, 13));

                                        panel_1.add(lblMessage);

                                        frame.getContentPane().add(panel_1);

                                        frame.revalidate();
                                        frame.repaint(10);
                                        frame.revalidate();
                                }
                                else if(textField_1.getText().equals("")) {

                                        panel_2.setBackground(new Color(50, 200, 255));
                                        panel_2.setBounds(10, 134, 330, 26);

                                        JLabel lblMessage = new JLabel("1 :");
                                        lblMessage.setBounds(50, 50, 50, 50);
                                        lblMessage.setAlignmentX(50);
                                        lblMessage.setForeground(new Color(255, 255, 255));
                                        lblMessage.setFont(new Font("Tahoma", Font.BOLD, 13));

                                        panel_2.add(lblMessage);

                                        frame.getContentPane().add(panel_2);

                                        frame.remove(panel_1);

                                        frame.revalidate();
                                        frame.repaint(10);
                                        frame.revalidate();
                                }
                        }
                });

                btnValidate.setBounds(231, 71, 89, 23);
                panel.add(btnValidate);
        }
}
4

2 に答える 2

3

最も簡単な方法は、単純に可視性を調整することです ( JComponent#setVisible( false ))。

本当にコンポーネントを完全に削除したい場合は、Container#removeメソッドに記載されているように、削除して再検証する必要があります

このメソッドは、レイアウト関連の情報を変更するため、コンポーネント階層を無効にします。コンテナーが既に表示されている場合は、変更を反映するために、その後階層を検証する必要があります。

次のようなコードになります

panel.remove( componentToRemove );
panel.revalidate();
panel.repaint();

補足として、nullレイアウトとそれらのsetBounds呼び出しを適切なに置き換えてくださいLayoutManager。SO で利用可能な優れた「ネストされたレイアウトの例」を見て、レイアウトマネージャーで何が可能かを確認することをお勧めします。SOのSwing タグ情報には、レイアウト マネージャーの使用を開始する際に役立つ追加のリンクが含まれています。

于 2012-06-19T21:21:04.313 に答える
1

yourpanel.setVisible(false);パネルを非表示にする必要があります。「yourPanel」は JPanel インスタンスです。

于 2012-06-19T21:11:23.780 に答える