데이터를 암호화하는 프로그램을 쓰고 있습니다. 텍스트 편집을위한 JTextArea가 있지만, 인코딩 된 텍스트인지 일반 텍스트인지 선택하고 싶습니다. 이를 위해 저장 버튼을 클릭 할 때 나타나는 JDialog를 만들었습니다. 두 개의 라디오 버튼이 있습니다. 하나는 암호화 된 데이터를 저장하고 다른 하나는 일반 텍스트로 저장하는 버튼입니다. 그 중간에는 encasskey를 요구하는 JPasswordField가 있습니다.라디오 버튼을 선택하거나 선택하지 않을 때 텍스트 필드를 숨기는 방법은 무엇입니까?
내 질문은 암호화 된 옵션을 선택하지 않은 경우 TextField를 사용할 수없고 반투명하게 만드는 간단한 방법이 있다면 제 질문입니다. 또는 간단한 방법이 없다면 TextArea를 숨기는 방법입니다. 라디오 버튼에 ChangeListener를 사용하려고했지만 작동하지 않습니다. 여기 내 코드입니다 :
import javax.swing.BoxLayout;
import javax.swing.ButtonGroup;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JRadioButton;
import javax.swing.SwingUtilities;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
public class StackOverflowVersion extends JFrame {
public static JFrame frame;
public StackOverflowVersion() {
dialogoCriptografar();
System.exit(EXIT_ON_CLOSE);
}
public void dialogoCriptografar(){
final ButtonGroup bGroup = new ButtonGroup();
JRadioButton[] buttons = new JRadioButton[2];
final JPasswordField passwordField = new JPasswordField(20);
// create the raio bunttons
buttons[0] = new JRadioButton("Encript document before saving");
buttons[1] = new JRadioButton("Just save it");
//ad them to the ButtonGroup
bGroup.add(buttons[0]);
bGroup.add(buttons[1]);
// select the option to encript
buttons[0].setSelected(true);
//creates a panel with the radio buttons and a JPasswordField
final JPanel box = new JPanel();
JLabel descricao = new JLabel("Choose an option to save:");
box.setLayout(new BoxLayout(box, BoxLayout.Y_AXIS));
box.add(descricao);
box.add(buttons[0]);
box.add(passwordField);
box.add(buttons[1]);
// creates the dialog
final JDialog dialogo = new JDialog(frame, "Storage options", true);
dialogo.setSize(275,125);
dialogo.setLocationRelativeTo(frame);
dialogo.setResizable(false);
dialogo.add(box);
dialogo.setVisible(true);
/* Doesn't work:
buttons[0].addChangeListener(new ChangeListener(){
boolean visivel = true;//ele começa visivel
public void stateChanged(ChangeEvent event){
if(visivel){
box.remove(password);
SwingUtilities.updateComponentTreeUI(dialogo);
dialogo.revalidate();
dialogo.repaint();
visivel = false;
}
else{
box.add(password);
SwingUtilities.updateComponentTreeUI(dialogo);
dialogo.revalidate();
dialogo.repaint();
SwingUtilities.updateComponentTreeUI(dialogo);
visivel = true;
}
}
});
*/
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
frame = new StackOverflowVersion();
frame.setVisible(true);
}
});
}
}
감사합니다. 좋은 생각입니다. 하지만 ChangeListener 사용을 도와 줄 수 있습니까? 작동하지 않습니다. 아니면 새로운 질문을해야합니까? – Junior
네, 새로운 질문입니다. 관련이없는 것 같습니다. –
또한 * 시각적 인 표시를주는'setEnabled (false)'를 살펴보십시오 * 사용자가 필드에 입력하는 것으로 가정하지 않았습니다. (필드는 포커스도 맞지 않습니다). –