2013-05-16 2 views
-1

그래서 "이름"또는 "성"을 선택하고 마우스를 palettePane에서 누르면 첫 번째 또는 두 번째 라벨이있는 라벨이 표시되도록하려고합니다. 성이 mouseX 또는 mouseY에 나타납니다. 이것은 내가 얻은 것만 큼 멀리 떨어져 있습니다. 이견있는 사람?Mouselistener를 사용하여 JPanel에 라벨을 추가하려고 시도했습니다

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; 
} 

...

+0

당신이 palette' 창은 어떤 이미지를 생성하는 데 도움이되지 수있는 레이아웃 매니저 – MadProgrammer

+1

의 제어하에 '것입니다 내가 볼 수있는 주요 문제, 아니 생각, (JPanel에 추가 된) JLabel에 추가 된 MouseListener에 대해 [SSCCE] (http://sscce.org/), 짧은 runnale, compilable 바로 게시하십시오. – mKorbel

+0

@MadProgrammer 절대 위치 지정을 시도했지만 palettePane 심지어 나타나지 않을 것입니다. –

답변

1
  1. palettePane는 것을 의미하는 레이아웃 매니저의 통제하에 현재

    는 설정이다 위치를 변경하려는 시도는 컨테이너의 유효성을 다시 확인할 때 실패하거나 대체 될 수 있습니다 ... 레이아웃을 설정하십시오 관리자에게 null
  2. preferredSize을 사용하면 자신 만의 레이아웃 컨트롤을 사용하여 도움을 얻지 못할 수 있습니다. 대신, 당신은 ... firstNameLabel.setSize(firstNameLabel.getPreferredSize());
  3. 귀하의 String 비교는 잘못 ... 예를 들어

, 당신이하고있는 ... setSize 방법 대신 구성 요소를 사용하여 할 필요가

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) { 
     } 
    } 
} 
+0

1과 2를 구현하기 위해 내 코드가 사용되었습니다. 어떤 이유로 든 palettPane이 존재하지 않았습니다. –

+0

'palettePane' pane은 layout manager가 널 (null)로 설정되어 있어야합니다.이 컨테이너는 앉아있는 컨테이너가 아닙니다 ... – MadProgrammer

+0

게시 된 작업 예제 – MadProgrammer

관련 문제