Path: csiph.com!feeder.erje.net!1.eu.feeder.erje.net!newsreader4.netcologne.de!news.netcologne.de!.POSTED.2001-4dd4-1ada-0-4d12-bcab-8549-5911.ipv6dyn.netcologne.de!not-for-mail From: Patrick Roemer Newsgroups: de.comp.lang.java Subject: Re: Java Swing: alle Elemente eines JFrames durchlaufen Date: Fri, 30 Nov 2018 14:38:56 +0100 Organization: news.netcologne.de Distribution: world Message-ID: References: <90ktvdt94icmm7d1vk9nrakimqstaa0ojo@4ax.com> <9vuvvdtqjv4rp1rcehsk50jhcek69rgbbv@4ax.com> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Injection-Date: Fri, 30 Nov 2018 13:38:56 -0000 (UTC) Injection-Info: newsreader4.netcologne.de; posting-host="2001-4dd4-1ada-0-4d12-bcab-8549-5911.ipv6dyn.netcologne.de:2001:4dd4:1ada:0:4d12:bcab:8549:5911"; logging-data="11629"; mail-complaints-to="abuse@netcologne.de" User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.24) Gecko/20100411 Thunderbird/2.0.0.24 Mnenhy/0.7.6.0 In-Reply-To: <9vuvvdtqjv4rp1rcehsk50jhcek69rgbbv@4ax.com> Content-Language: en-US Xref: csiph.com de.comp.lang.java:13227 Responding to Rainer: > On Wed, 28 Nov 2018 22:46:41 +0100, Patrick Roemer > 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: 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 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); } } 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