Frage

Es gibt eine JCheckBox namens „eins" und ein anderer namens "zwei".Es gibt auch ein JScrollPane namens „sp".Darin befindet sich eine JTextArea.Der Zweck der Kontrollkästchen besteht darin, bestimmte Teile des Programms ein- und auszublenden.Ich habe das Programm vereinfacht und erkläre hier langwierig, was passieren soll, nur um sicherzustellen, dass Sie das Programm verstehen.

Das soll passieren:

Zunächst nur eins ist sichtbar und nicht ausgewählt.Wann immer eins ist ausgewählt, zwei sollte sichtbar gesetzt werden.Wann immer zwei ist ausgewählt, sp sollte sichtbar gesetzt werden.Wenn ein Kontrollkästchen deaktiviert ist, wird die entsprechende Komponente unsichtbar gesetzt.Wenn jedoch eines nicht ausgewählt ist, sp wird ebenfalls unsichtbar gesetzt.(eins steuert zwei Und sp).

Das Problem:

Wann eins ist ausgewählt, zwei ist sichtbar.Aber wenn zwei ist ausgewählt, sp ist nicht sichtbar (sollte es sein).Wenn man währenddessen nicht ausgewählt ist zwei ist ausgewählt, zwei ist unsichtbar (das sollte passieren).Aber wenn eins ist ausgewählt, zwei ist sichtbar und ganz plötzlich sp ist jetzt sichtbar.Ab diesem Zeitpunkt funktioniert das Programm wie vorgesehen.

Dies funktioniert jedoch mit anderen JComponents (anstelle des JScrollPane).

Was könnte falsch sein?

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);
    }
}
War es hilfreich?

Lösung

Sie sollten das erneut validieren Checkboxscrollpane Panel.

Sie sollten jedoch nicht bei jedem Malereignis die Position der Komponenten festlegen:

setLayout(null);

    one.setSize(100, 20);
    two.setSize(100, 20);
    sp.setSize(100, 20);
    one.setLocation(50, 50);
    two.setLocation(70, 70);
    sp.setLocation(90, 90);

Und entfernen Sie die public void paintComponent(Graphics g) { Methode.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top