2 개의 라디오 버튼을 넣은 패널이 있습니다. 라디오 버튼에 더블 클릭 동작을 구현하려고하지만 작동하지 않는 것 같습니다. 결론적으로 라디오 버튼 중 하나를 두 번 클릭하면서 다른 컴포넌트를 볼 수있게하고 싶습니다. 라벨을 클릭 할 때 더 정확하게 나타납니다.스윙의 라디오 버튼에 MouseListener
라디오 버튼이 비활성화 된 경우에만 마우스 수신기가 작동하는 이유는 무엇입니까?
2 개의 라디오 버튼을 넣은 패널이 있습니다. 라디오 버튼에 더블 클릭 동작을 구현하려고하지만 작동하지 않는 것 같습니다. 결론적으로 라디오 버튼 중 하나를 두 번 클릭하면서 다른 컴포넌트를 볼 수있게하고 싶습니다. 라벨을 클릭 할 때 더 정확하게 나타납니다.스윙의 라디오 버튼에 MouseListener
라디오 버튼이 비활성화 된 경우에만 마우스 수신기가 작동하는 이유는 무엇입니까?
편집 :
체크 아웃 우리가별로 JLabel의/JTextField를
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusAdapter;
import java.awt.event.FocusEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.BorderFactory;
import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
public class TestRadioButton {
private void initUI() {
JFrame frame = new JFrame(TestRadioButton.class.getSimpleName());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
final JPanel panel = new JPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.LINE_AXIS));
final JRadioButton button = new JRadioButton();
final JLabel label = new JLabel("Double click me");
final JTextField editionTF = new JTextField();
editionTF.setOpaque(false);
editionTF.addFocusListener(new FocusAdapter() {
@Override
public void focusLost(FocusEvent e) {
stopEdition(panel, label, editionTF);
}
});
editionTF.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
stopEdition(panel, label, editionTF);
}
});
label.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
if (e.getClickCount() == 2) {
startEdition(panel, label, editionTF);
}
}
});
editionTF.setBorder(BorderFactory.createEmptyBorder());
editionTF.setFont(label.getFont());
editionTF.setVisible(false);
panel.add(button);
panel.add(label);
panel.add(editionTF);
frame.add(panel, BorderLayout.NORTH);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
protected void stopEdition(final JPanel panel, final JLabel label, final JTextField editionTF) {
label.setText(editionTF.getText());
label.setVisible(true);
editionTF.setVisible(false);
}
protected void startEdition(final JPanel panel, final JLabel label, final JTextField editionTF) {
editionTF.setText(label.getText());
label.setVisible(false);
editionTF.setVisible(true);
}
public static void main(String[] args) {
final TestRadioButton test = new TestRadioButton();
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
test.initUI();
}
});
}
}
대답에 라디오 버튼의 텍스트를 분리하지만, 의견이 너무 작은이 코드를. 이 코드는 다음 코드와 함께 잘 작동합니다. 당신이 우리에게 보여주지 않는 다른 문제가있을 것입니다. 게시를 고려해보십시오 SSCCE
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JRadioButton;
import javax.swing.SwingUtilities;
public class TestRadioButton {
private void initUI() {
JFrame frame = new JFrame(TestRadioButton.class.getSimpleName());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
final JRadioButton button = new JRadioButton("Double click me");
button.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
if (e.getClickCount() == 2) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
JOptionPane.showMessageDialog(button, "Radio button has been double clicked");
}
};
}
}
});
frame.add(button);
frame.setSize(400, 400);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public static void main(String[] args) {
final TestRadioButton test = new TestRadioButton();
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
test.initUI();
}
});
}
}
[JOptionPane은 invokeLater에 래핑되어야합니다.] (http://stackoverflow.com/questions/8282488/why-does-setselected-on-jcheckbox-lose-effect), Java 버전 – mKorbel
@mKorbel 실제로 작동하거나 종속되지 않습니다. 이 경우 라디오 버튼 상태에 신경 쓰지 않기 때문에 똑같은 상황에 빠지지는 않지만 그렇게하는 것이 더 적절합니다. –
왜 그렇게 원하십니까? 라디오 버튼은 두 번 클릭하지 않아야합니다. 아무도 당신의 라디오 버튼을 두 번 클릭하지 않을 것입니다. 왜냐하면 모든 사용자는 라디오 버튼이 다른 모든 라디오 버튼처럼 작동하기를 기대하기 때문입니다. 그것을 클릭하여 선택하면됩니다. –
사실, 여전히 유효한 질문입니다. –
나는 그것의 끔찍한 UI에 동의합니다. 그러나 레이블 또는 아이콘을 클릭하면 확인할 수있는 방법은 없지만 MouseListener 잘 작동합니다. 문제를 보여주는 SSCCE를 게시하십시오. – camickr