「 one 」と呼ばれる JCheckBox と「 two 」と呼ばれる別の JCheckBox があります。「 sp 」と呼ばれる JScrollPane もあります。その中に JTextArea があります。チェックボックスのポイントは、プログラムの特定の部分を非表示および表示することです。私はプログラムを単純化しました。ここでは、プログラムを確実に理解できるように、何が起こるのかを説明します。
これは起こるはずです:
最初は1 つだけが表示され、選択されていません。1 つが選択されるたびに、 2 つが表示されるように設定する必要があります。2 つが選択されている場合は常に、spを表示に設定する必要があります。チェックボックスが選択されていない場合、対応するコンポーネントは非表示に設定されます。ただし、いずれかが選択されていない場合、spも非表示に設定されます。( oneはtwoとspを制御します)。
問題:
1 つを選択すると、2つが表示されます。ただし、2 つが選択されている場合、spは表示されません (表示されるはずです)。2 つが選択されているときに 1 つが選択されていない場合、2つが非表示になります (これは発生するはずです)。しかし、1 つを選択すると、2 つが表示され、突然spが表示されるようになりました。この時点以降、プログラムは意図したとおりに機能します。
ただし、これは (JScrollPane の代わりに) 他の JComponents で機能します。
何が間違っている可能性がありますか?
package tests;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Checkboxscrollpane extends JPanel {
private JCheckBox one, two;
private JScrollPane sp;
private Checkboxscrollpane() {
Listener listener = new Listener();
one = new JCheckBox();
one.addActionListener(listener);
add(one);
two = new JCheckBox();
two.addActionListener(listener);
add(two);
sp = new JScrollPane(new JTextArea("hello"));
add(sp);
one.setVisible(true);
two.setVisible(false);
sp.setVisible(false);
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
one.setLocation(50, 50);
two.setLocation(70, 70);
sp.setLocation(90, 90);
}
private class Listener implements ActionListener {
public void actionPerformed(ActionEvent e) {
if (e.getSource() == one) {
two.setVisible(one.isSelected());
}
sp.setVisible(one.isSelected() && two.isSelected());
}
}
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setSize(300, 200);
frame.add(new Checkboxscrollpane());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}