-1

それで、「名」または「姓」のいずれかを選択して、palettePaneでマウスを押すと、自分の名または姓のラベルがmouseXまたはmouseYに表示されるようにしようとしています。これは私が得た限りであり、私は困惑しています。何かご意見は?

これはセットアップです:

public class benNameFunc extends JPanel implements ActionListener, MouseListener{




private final JRadioButton firstName;


private final JRadioButton lastName;



private final JButton deleteButton;

private JLabel firstNameLabel;

 int x; 
 int y;

int firstOrLast = 1;

public benNameFunc(){

    lastName = new JRadioButton("Last Name");
    lastName.setPreferredSize(new Dimension(100, 50));
    lastName.setForeground(Color.RED);
    lastName.setActionCommand("last");
    lastName.setSelected(false);

    firstName = new JRadioButton("First Name");
    firstName.setPreferredSize(new Dimension(100, 50));
    firstName.setForeground(Color.RED);
    firstName.setActionCommand("first");
    firstName.setSelected(true);


    JPanel palettePane = new JPanel(new BorderLayout());
    palettePane.setPreferredSize(new Dimension (800, 500));

    add(palettePane, BorderLayout.CENTER);

    firstNameLabel = new JLabel("Ben");     
    firstNameLabel.setPreferredSize(new Dimension(100, 10));
    firstNameLabel.setForeground(Color.WHITE);
    firstNameLabel.setVisible(true);
    palettePane.add(firstNameLabel);

    buttonPane.setBackground(Color.BLACK);

     firstName.addActionListener(this);
     lastName.addActionListener(this);
     deleteButton.addActionListener(this);

     palettePane.addMouseListener(this);



}

次に、アクション コード:

public void actionPerformed(ActionEvent e) {

    if (e.getActionCommand() == "first") {
        firstOrLast = 1;
    } else if (e.getActionCommand() == "last") {
        firstOrLast = 2;
    } else if (e.getSource() == deleteButton){
        firstOrLast = 3;
    }

}


public void mousePressed(MouseEvent e) {


    x = e.getX(); 
    y = e.getY();

    switch (firstOrLast) {
    case 1:  
        firstNameLabel.setLocation(x, y);

    break;
    case 2: 

    break;
    case 3:

    break;
    default: 
    break;
}

...

4

1 に答える 1

1
  1. palettePane現在、レイアウト マネージャーの制御下にあります。つまり、場所を変更しようとすると、ほとんどの場合失敗するか、コンテナーが再検証されたときに置き換えられます。レイアウト マネージャーを に設定します。null
  2. preferredSize独自のレイアウト コントロールを行いたい場合に使用しても、役に立ちません。setSize代わりに、代わりに componentsメソッドを使用する必要があります...firstNameLabel.setSize(firstNameLabel.getPreferredSize());
  3. あなたのString比較は間違っています...

たとえば、あなたがやっている...

if (e.getActionCommand() == "first") {
    firstOrLast = 1;
} else if (e.getActionCommand() == "last") {
    firstOrLast = 2;
} else if (e.getSource() == deleteButton) {
    firstOrLast = 3;
}

いつやるべきか...

if (e.getActionCommand().equals("first")) {
    firstOrLast = 1;
} else if (e.getActionCommand().equals("last")) {
    firstOrLast = 2;
} else if (e.getSource() == deleteButton) {
    firstOrLast = 3;
}

警告

nullレイアウトはひどく難しく、問題を抱えています。これが実際にやりたいことであることを十分に確認してください。

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.border.LineBorder;

public class TestNameClick {

    public static void main(String[] args) {
        new TestNameClick();
    }

    public TestNameClick() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                }

                JFrame frame = new JFrame("Testing");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setLayout(new BorderLayout());
                frame.add(new BenNameFunc());
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

    public class BenNameFunc extends JPanel implements ActionListener, MouseListener {

        private final JRadioButton firstName;
        private final JRadioButton lastName;
//        private final JButton deleteButton;
        private JLabel firstNameLabel;
        int x;
        int y;
        int firstOrLast = 1;

        public BenNameFunc() {

            lastName = new JRadioButton("Last Name");
            lastName.setPreferredSize(new Dimension(100, 50));
            lastName.setForeground(Color.RED);
            lastName.setActionCommand("last");
            lastName.setSelected(false);

            firstName = new JRadioButton("First Name");
            firstName.setPreferredSize(new Dimension(100, 50));
            firstName.setForeground(Color.RED);
            firstName.setActionCommand("first");
            firstName.setSelected(true);


            JPanel palettePane = new JPanel(new BorderLayout());
            palettePane.setLayout(null);
            palettePane.setPreferredSize(new Dimension(800, 500));

            add(palettePane, BorderLayout.CENTER);

            firstNameLabel = new JLabel("Ben...");
            firstNameLabel.setSize(firstNameLabel.getPreferredSize());
//            firstNameLabel.setForeground(Color.WHITE);
//            firstNameLabel.setVisible(true);
            palettePane.add(firstNameLabel);

//            buttonPane.setBackground(Color.BLACK);

            firstName.addActionListener(this);
            lastName.addActionListener(this);
//            deleteButton.addActionListener(this);

            palettePane.addMouseListener(this);



        }
        public void actionPerformed(ActionEvent e) {

            if (e.getActionCommand().equals("first")) {
                firstOrLast = 1;
            } else if (e.getActionCommand().equals("last")) {
                firstOrLast = 2;
//            } else if (e.getSource() == deleteButton) {
//                firstOrLast = 3;
            }

        }

        public void mousePressed(MouseEvent e) {
            x = e.getX();
            y = e.getY();

            switch (firstOrLast) {
                case 1:
                    firstNameLabel.setLocation(x, y);
                    break;
                case 2:
                    break;
                case 3:
                    break;
                default:
                    break;
            }
        }

        @Override
        public void mouseClicked(MouseEvent e) {
        }

        @Override
        public void mouseReleased(MouseEvent e) {
        }

        @Override
        public void mouseEntered(MouseEvent e) {
        }

        @Override
        public void mouseExited(MouseEvent e) {
        }
    }
}
于 2013-05-16T05:36:44.303 に答える