有一個名爲「一個」和另一個名爲「兩個」的JCheckBox。還有一個名爲「sp」的JScrollPane。它是一個JTextArea。複選框的目的是隱藏和顯示程序的某些部分。我簡化了程序,在這裏我沉悶地解釋了爲了確保你理解程序應該發生的事情。設置JScrollPane可見/不可見通過JCheckBox不工作
這是應該發生:
最初只有一個是可見的,它是未選中。每當一個被選中,兩個應該被設置爲可見。每當兩個被選中時,sp應被設置爲可見。當複選框未被選中時,相應的組件被設置爲不可見。但是,當一個未選中時,sp也被設置爲不可見。 (one controlls two and sp)。
問題:
當一個被選擇時,是可見的。但是,當選擇兩個時,sp不可見(應該是)。當一個未被選中時,兩個被選中,兩個是隱形的(這應該發生)。但是當一個被選中時,兩個可見,並且突然sp現在可見。在此之後,該程序按照預期運行。
然而,這與其他JComponents(替代JScrollPane)一起使用。
什麼可能是錯的?
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);
}
}
我這樣做,因爲我想在特定位置我的組件。做你說的使用默認面板佈局來查找組件,這是我不想要的。 – Alan 2012-07-27 18:25:03
並重新驗證作品,謝謝 – Alan 2012-07-27 18:25:32
是的我忘了添加行:'setLayout(null)' – Xeon 2012-07-27 18:29:36