Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > de.comp.lang.java > #13221 > unrolled thread
| Started by | Rainer <Rainer.Poop@Rcpt.at> |
|---|---|
| First post | 2018-11-28 18:36 +0100 |
| Last post | 2018-11-29 16:45 +0100 |
| Articles | 6 — 2 participants |
Back to article view | Back to de.comp.lang.java
Java Swing: alle Elemente eines JFrames durchlaufen Rainer <Rainer.Poop@Rcpt.at> - 2018-11-28 18:36 +0100
Re: Java Swing: alle Elemente eines JFrames durchlaufen Patrick Roemer <sangamon@netcologne.de> - 2018-11-28 22:46 +0100
Re: Java Swing: alle Elemente eines JFrames durchlaufen Rainer <Rainer.Poop@Rcpt.at> - 2018-11-29 15:48 +0100
Re: Java Swing: alle Elemente eines JFrames durchlaufen Patrick Roemer <sangamon@netcologne.de> - 2018-11-30 14:38 +0100
Re: Java Swing: alle Elemente eines JFrames durchlaufen Rainer <Rainer.Poop@Rcpt.at> - 2018-11-29 15:54 +0100
Re: Java Swing: alle Elemente eines JFrames durchlaufen Rainer <Rainer.Poop@Rcpt.at> - 2018-11-29 16:45 +0100
| From | Rainer <Rainer.Poop@Rcpt.at> |
|---|---|
| Date | 2018-11-28 18:36 +0100 |
| Subject | Java Swing: alle Elemente eines JFrames durchlaufen |
| Message-ID | <90ktvdt94icmm7d1vk9nrakimqstaa0ojo@4ax.com> |
Hallo NG,
ich brauche ein wenig Unterstützung bei o. g .Aufgabe.
Ich habe hier
https://www.java-forum.org/thema/alle-elemente-eines-panels.92257/
eine Lösung gefunden, um den Text aller Textfelder zusetzen
Component[] components = xy.getComponents();
for(Component c : components) {
if(c instanceof JTextField) {
JTextField txf = (JTextField) c;
txf.setText("mein Text");
}
Das könnte ich sicherlich für meine Zwecke anpassen
(z. B. alle Optionsfelder ein- oder ausschalten, etc.)
Nur scheint das o. g. Beispiel für AWT zu passen.
Wie lautet eine Version für SWING? (javax.swing.JFrame)
Was muss ich z. B. anstelle von 'Component' verwenden?
Dake und Gruß
Rainer
[toc] | [next] | [standalone]
| From | Patrick Roemer <sangamon@netcologne.de> |
|---|---|
| Date | 2018-11-28 22:46 +0100 |
| Message-ID | <ptn2c1$6h9$1@newsreader4.netcologne.de> |
| In reply to | #13221 |
Responding to Rainer:
> Ich habe hier
> https://www.java-forum.org/thema/alle-elemente-eines-panels.92257/
>
> eine Lösung gefunden, um den Text aller Textfelder zusetzen
>
> Component[] components = xy.getComponents();
> for(Component c : components) {
> if(c instanceof JTextField) {
> JTextField txf = (JTextField) c;
> txf.setText("mein Text");
> }
>
> Das könnte ich sicherlich für meine Zwecke anpassen
> (z. B. alle Optionsfelder ein- oder ausschalten, etc.)
>
> Nur scheint das o. g. Beispiel für AWT zu passen.
>
> Wie lautet eine Version für SWING? (javax.swing.JFrame)
> Was muss ich z. B. anstelle von 'Component' verwenden?
Swing basiert auf AWT; alle Swing-Elemente sind auch AWT-Components. Da
JTextFields gesucht werden, zielt das Beispiel offenkundig auf Swing.
Dieser Code durchläuft allerdings nur die direkt enthaltenen
Komponenten. Üblicherweise hat man es aber mit einem Komponentenbaum zu
tun. Bei einem JFrame z.B. dürftest Du damit lediglich eine JRootPane
erwischen; Textkomponenten liegen tiefer. Du bräuchtest also noch eine
Art rekursiven Abstieg für gefundene (AWT-)Container, um überhaupt zu
Textfeldern vorzustoßen.
Bliebe noch die Frage, wozu man sowas überhaupt braucht. Um etwa
Checkboxes/RadioButtons (~ Optionsfelder?) gruppiert zu kontrollieren,
gibt es sicherlich bessere Möglichkeiten - z.B. sie gleich bei Erzeugung
in einer geeigneten Collection vorzuhalten.
Viele Grüße
Patrick
[toc] | [prev] | [next] | [standalone]
| From | Rainer <Rainer.Poop@Rcpt.at> |
|---|---|
| Date | 2018-11-29 15:48 +0100 |
| Message-ID | <9vuvvdtqjv4rp1rcehsk50jhcek69rgbbv@4ax.com> |
| In reply to | #13222 |
On Wed, 28 Nov 2018 22:46:41 +0100, Patrick Roemer <sangamon@netcologne.de> wrote: >Bliebe noch die Frage, wozu man sowas überhaupt braucht. Um etwa >Checkboxes/RadioButtons (~ Optionsfelder?) gruppiert zu kontrollieren, >gibt es sicherlich bessere Möglichkeiten - z.B. sie gleich bei Erzeugung >in einer geeigneten Collection vorzuhalten. Könnte ich dazu ein Code-Beispiel haben? Rainer
[toc] | [prev] | [next] | [standalone]
| From | Patrick Roemer <sangamon@netcologne.de> |
|---|---|
| Date | 2018-11-30 14:38 +0100 |
| Message-ID | <ptrehg$bbd$1@newsreader4.netcologne.de> |
| In reply to | #13224 |
Responding to Rainer:
> On Wed, 28 Nov 2018 22:46:41 +0100, Patrick Roemer
> <sangamon@netcologne.de> wrote:
>>Bliebe noch die Frage, wozu man sowas überhaupt braucht. Um etwa
>>Checkboxes/RadioButtons (~ Optionsfelder?) gruppiert zu kontrollieren,
>>gibt es sicherlich bessere Möglichkeiten - z.B. sie gleich bei Erzeugung
>>in einer geeigneten Collection vorzuhalten.
>
> Könnte ich dazu ein Code-Beispiel haben?
Schwierig, wenn man nicht genau weiß, was Du eigentlich erreichen
willst. Im simpelsten Fall sowas:
<snip>
import javax.swing.*;
import java.awt.FlowLayout;
import java.awt.event.*;
import java.util.*;
import java.util.stream.*;
import static java.util.stream.Collectors.*;
public class JavaSwingCheck {
public static void main(String[] args) {
SwingUtilities.invokeLater(JavaSwingCheck::buildUI);
}
private static void buildUI() {
JFrame frame = new JFrame("Check");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(new FlowLayout());
List<JCheckBox> checks =
Stream.of("A", "B", "C").map(JCheckBox::new).collect(toList());
checks.forEach(c -> frame.getContentPane().add(c));
Action action = new AbstractAction("Off!") {
@Override public void actionPerformed(ActionEvent e) {
checks.forEach(c -> c.setSelected(false));
}
};
JButton button = new JButton(action);
frame.getContentPane().add(button);
frame.pack();
frame.setVisible(true);
}
}
</snip>
In einer echten, komplexeren Applikation würde man eh ein
Ordnungsprinzip für die UI-Logik haben wollen (MVC, Presentation
Model,...), und da gäbe es dann jeweils "natürliche" Stellen, an die
derartige Logik hingehört.
Viele Grüße
Patrick
[toc] | [prev] | [next] | [standalone]
| From | Rainer <Rainer.Poop@Rcpt.at> |
|---|---|
| Date | 2018-11-29 15:54 +0100 |
| Message-ID | <24vvvdpmr3rh2a6ngfhucigojp5ssok8v7@4ax.com> |
| In reply to | #13222 |
On Wed, 28 Nov 2018 22:46:41 +0100, Patrick Roemer <sangamon@netcologne.de> wrote: >Dieser Code durchläuft allerdings nur die direkt enthaltenen >Komponenten. Üblicherweise hat man es aber mit einem Komponentenbaum zu >tun. Ok, trotzdem würde ich den Code testen, allein um etwas zu lernen. Ich scheitere aber an der 1. Zeile Component[] components = xy.getComponents(); Welches Objekt statt xy müsste ich hier einsetzen? Rainer
[toc] | [prev] | [next] | [standalone]
| From | Rainer <Rainer.Poop@Rcpt.at> |
|---|---|
| Date | 2018-11-29 16:45 +0100 |
| Message-ID | <u9200etctq297fml46nr2u2gmci0ob09a5@4ax.com> |
| In reply to | #13225 |
On Thu, 29 Nov 2018 15:54:41 +0100, Rainer <Rainer.Poop@Rcpt.at>
wrote:
>On Wed, 28 Nov 2018 22:46:41 +0100, Patrick Roemer
><sangamon@netcologne.de> wrote:
>
>
>Welches Objekt statt xy müsste ich hier einsetzen?
OK, das hat sich erledigt, so geht's
Component[] components = getContentPane().getComponents();
for (Component c : components) {
if (c instanceof javax.swing.JCheckBox) {
javax.swing.JCheckBox chkbox = (javax.swing.JCheckBox) c;
chkbox.setSelected(false);
}
}
[toc] | [prev] | [standalone]
Back to top | Article view | de.comp.lang.java
csiph-web