Talk:Swing (Java)

Page contents not supported in other languages.
From Wikipedia, the free encyclopedia

More lightweight/heaviweigth discussion[edit]

The following phrase seems to be a leftover and does not make sense in the current context.

"The disadvantage of lightweight components is slower execution. The advantage is uniform behavior on all platforms."

71.112.18.252 (talk) 02:15, 28 November 2007 (UTC)[reply]

Swing Origins[edit]

I had a recent assignment to find the origin of the name of Swing (Java) and one student submitted this link stating that the name was based off the 1930's dance craze. Can anyone else confirm or deny this claim with sources? I already googled and looked through the Sun website.

Closest reference I can find is from an 1998 version of the Swing website: "Swing was the project name chosen by the developers of the new high-level components. Although these components are now part of the JFC software, the Swing name persists." I would not be surprised if the Swing team chose the name based on the dance (as opposed to the several other meanings of that word). I seem to recall hearing something to that effect at the time, but can't track down a reference. -- BrianDuff

I wondered about this, and found this article which seems kosher. https://blogs.oracle.com/thejavatutorials/entry/why_is_swing_called_swing Ety uncertain (talk) 07:24, 30 June 2009 (UTC)[reply]

Swing on Vista[edit]

Suggest we get a section on (and screenshots of) Swing in Vista - apparently it's rather more than just a port from XP. Some links : http://weblogs.java.net/blog/chet/archive/2006/10/java_on_vista_y.html http://weblogs.java.net/blog/chet/archive/2005/08/mustang_swing_a.html

--Wootery 23:09, 12 December 2006 (UTC)[reply]

Lightweight/heavyweight distinction[edit]

Was just skimming through the article for some general information on Swing and found the comparison with AWT unclear:

"...every Swing lightweight interface ultimately exists within an AWT heavyweight component because all of the top-level components in Swing ... extend an AWT top-level container."

A little more explanation of the relationship between the two would be helpful: if the AWT components are tied to native OS controls, and the Swing components are extensions of AWT components, how then do the Swing components manage to be "lightweight"? Are these AWT top-level containers so abstract as to not involve any of the "heavyweight" code? Do the Swing components extend them just to retain a consistent interface?

Only the top level components like windows are heavyweight, the components inside them (buttons, scrollbars, text fields, etc) are not - for the most part they're drawn using Java graphics routines. So it means that a JButton exists within a JWindow and therefore within a Window. --Jamoche 18:49, 8 October 2006 (UTC)[reply]

Hello World doesn't run?[edit]

I've tried compiling the hello world code, it compiles fine but gives very many errors when run. I've fixed it and would like some feedback.Thatfunkymunki 06:19, 20 March 2006 (UTC)[reply]

All you did was remove the package statement? The package statement is simply a source file organization issue, not a code correctness issue. (The Java package article is in need of some serious work—it doesn't currently provide a whole lot of clarity about the implied directory structure of packages.) I suppose we could add to the article the fact that the package statement implies that the source files are placed in a "helloworld" directory placed in the CLASSPATH, but then again, many IDEs don't require this organization. (Also, when you make a semantic change, such as modifying the source code, you should not mark the edit as minor.) —Doug Bell talkcontrib 07:25, 20 March 2006 (UTC)[reply]

I think the example isn't great. I have removed the anonymous class, but really it just shows what a poor example it is.. something along these lines would be clearer.. Simonjl

You, Simon, should read up on Swing's requirements in regard to thread safety. Your example handles components off of the EDT, which is SPECIFICALLY not correct. Do NOT spread knowledge you do not posses. Stolsvik (talk) 07:53, 30 June 2010 (UTC)[reply]
public class HelloWorld  {
    
    // NOTE NOTE!! THIS IS A INCORRECT AND BROKEN EXAMPLE.
    //  THE EXAMPLE HANDLES SWING COMPONENTS OFF OF THE EVENT DISPATCH THREAD.
    //  IT IS A THREADING AND CORRECTNESS DISASTER IN WAITING. Stolsvik (talk) 07:53, 30 June 2010 (UTC) 
    
    public static void main(String[] arg) {
        JFrame f = new JFrame ("Hello, World!");
        f.setDefaultCloseOperation (JFrame.DISPOSE_ON_CLOSE);
        f.getContentPane().add (new JLabel("Hello, World!"));
        f.pack();
        f.setVisible(true);
        EventQueue.invokeLater (new Thread());
    } 
}[reply]

This is a cleaned up version of HelloWorld.java


import javax.swing.JFrame;
import javax.swing.JLabel;
public class HelloWorld implements Runnable  
{
    public void run()
    {
        JFrame f = new JFrame ("Hello, World!");
        f.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
        f.getContentPane().add (new JLabel("Hello, World!"));
        f.pack();
        f.setVisible(true);
    }
    public static void main(String[] args) 
    {
        HelloWorld hw = new HelloWorld();
        javax.swing.SwingUtilities.invokeLater (hw);
    } 
}

Ncmathsadist (talk) 00:24, 29 January 2012 (UTC)ncmathsadist[reply]

Cryptic example[edit]

What's the Event Dispatch Thread?

This is where the event queue lives. Events come from the user; they consist of such things as mouse clicks, button clicks, menu selections keystrokes and other interactions between the program user and the GUI. As these occur, they are registered onto the event queue. This queue lives in a single thread, so the events are serviced in the order in which they arrive. Were this not so, the application would behave in a manner disconcerting to the user. Ncmathsadist (talk) 00:35, 29 January 2012 (UTC)ncmathsadist[reply]


What's an anonymous Runnable class? 

The runnable interface is a contract requiring the implementation of the method

public void run()

You can create a nameless class as follows.

new Runnable(){
    public void run()
    {
        .....
    }
}

Such a class is an anonymous runnable class. Ncmathsadist (talk) 00:35, 29 January 2012 (UTC)ncmathsadist[reply]

Why do I have to go to the Concurrency tutorial to just show a label and a button? What rules changed in 2004? OK I don't really ask these questions, but I doubt that anyone who don't know about Swing will understand something about Swing with the example. Maybe he will understand that Swing is an overcomplicated affair and that he should stay clear of it and use Flex or C# instead ;) I'm kidding because I love to use Swing, but I doubt that in it's current state this example is useful at all, even if it is legit. Hervegirod (talk) 00:31, 6 November 2009 (UTC)[reply]

Use the outline I placed in the article itself. Do not use wildcard imports as the person who modified it did. Ncmathsadist (talk) 00:35, 29 January 2012 (UTC)ncmathsadist[reply]


Yes this is a bit awkward. However it only requires 4 lines
  EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
             ....
  }});
of standard boiler plate code to get thread safe behaviour. You can miss this out and it will probably work. However, I don't think it would be right to show technically incorrect code and bad practice.
One way of organising this would be to have a code fragment first with just the Swing bits. Then introducing the threading example later.--Salix (talk): 07:34, 6 November 2009 (UTC)[reply]
It's a few years later, but I've added a better explanation as to why we are using the EDT. I also note that you can indeed run code without it, but that it's considered better form to use SwingUtilities.invokeLater(). Thunderforge (talk) 15:20, 28 October 2013 (UTC)[reply]

JAVA SWING[edit]

Swing is a set of classes that provides more powerful and flexible functionality that is possible with standard and advanced AWT(Abstract Window Toolkit) components.These are not implemented by platform specific code. Instead they are written entirely in Java, therefore, they are platform independent. Fundamentals of swing is the JApplet class that extends the Applet class. Applets that use Swing must be subclasses of the JApplet class —The preceding unsigned comment was added by AbhishekDutta1987 (talkcontribs) 02:22, 1 May 2007 (UTC)[reply]

The article says that Swing is derived from Applet. This is not true in the strict sense. Applet does not appear in the inheritance tree of most Swing components. Ncmathsadist (talk) 01:02, 29 January 2012 (UTC)ncmathsadist[reply]

Origin of Name[edit]

The official word on the name's origin.

http://blogs.sun.com/thejavatutorials/entry/why_is_swing_called_swing

Jon914 18:38, 15 September 2007 (UTC)[reply]

archived copy (April 26, 2009) Would this be considered a reliable source for citation, or <heavy sarcasm - maybe> should I send an email to Sharon Zakhour asking for an official quote from Jeff Dinkins (one of the original Swing engineers at Sun), and whether I can that email on WikiMedia so it becomes part of the Collective Sourced Quotes Of The Age and can be properly cited?<sarcasm>

Hello world[edit]

The Hello world example used on this article is not really a Hello world IMHO:

  • the use of Runnable and threading stuff is not necessary in such a basic program as this one, making the example more complex that it should. Threading stuff vs Swing should be in a new paragraph.
  • There's too much comments in the code, which should be outside the code, in the paragraph.
  • Centering the frame in the middle of the screen is also not necessary in this example.

I have no problem to modify the example myself, but I'm asking for comments on this proposal before ;-) Hervegirod (talk) 10:23, 23 February 2008 (UTC)[reply]

since I have received no comment since February (more than one month), I assumed people agree with my proposal. Hervegirod (talk) 12:29, 28 March 2009 (UTC)[reply]

External links[edit]

Could someone please have a look at the external links section? The ones that are left after the so-called cleanup from Aug 27th are mostly useless. (A blog with less than 2 dozen entries that was started in May this year remained, but the links to java.sun.com were deleted...) 195.212.29.163 (talk) 14:39, 26 September 2008 (UTC) —Preceding unsigned comment added by 195.212.29.163 (talk) [reply]

I agree. The cleanup of the external links was idiotic. The Swing tutorial link is one I consider invaluable. —Preceding unsigned comment added by 66.245.20.81 (talk) 22:28, 16 August 2009 (UTC)[reply]

Disadvantages[edit]

Swing has some disadvantages. Most important one seems to be single threaded model, this is very limiting. Also Swing component takes more time to render. Im pretty sure that regular users of Swing can find others. —Preceding unsigned comment added by 82.145.248.24 (talk) 05:02, 6 June 2009 (UTC)[reply]

Every GUI framework that puts pixels on screens are single threaded, it's just a question of how they present it to the user. Flex disallows threading entirely, for example. Really Swing has only one thread allowed to touch pixels and objects representing the widgets, but any number of threads that can do anything else. Swing is merely upfront about it's nature. 75.173.228.67 (talk) 04:43, 28 June 2009 (UTC)[reply]

download[edit]

does anyone know if the seperate release of swing for use on older versions of java is still available for download and if so from where? Plugwash (talk) 15:33, 19 November 2009 (UTC)[reply]

Messy Code[edit]

That code at the end is a mess. I've written cleaner code and I'm 13. --75.166.224.107 (talk) 21:41, 22 November 2009 (UTC)[reply]

I rewrote this code. Someone has changed it to use wildcard importing, which I do not consider good style. It violates the principle of keeping namespaces small. You always want to know exactly what classes you are making visible.

You will notice that I made the whole class a Runnable so you do not need an anonymous class in the main method. You just instantiate the class and pass it to javax.swing.SwingUtilities.invokeLater(). — Preceding unsigned comment added by Ncmathsadist (talkcontribs) 00:13, 29 January 2012 (UTC)[reply]

Use on the web[edit]

Added section about possibility to use Swing on web with third party product (similar section to for example http://en.wikipedia.org/wiki/Standard_Widget_Toolkit#Use_on_the_web). Change reveted by Salix_alba (reason: advert for AjaxSwing). Don't want to advert anything, want to show web possibility of Swing as compared to SWT, currently shows SWT as having that advantage over Swing. Would be glad to hear any comments or suggestions on that revision. —Preceding unsigned comment added by 79.135.222.215 (talk) 18:18, 20 October 2010 (UTC)[reply]

External links modified[edit]

Hello fellow Wikipedians,

I have just modified one external link on Swing (Java). Please take a moment to review my edit. If you have any questions, or need the bot to ignore the links, or the page altogether, please visit this simple FaQ for additional information. I made the following changes:

When you have finished reviewing my changes, please set the checked parameter below to true or failed to let others know (documentation at {{Sourcecheck}}).

This message was posted before February 2018. After February 2018, "External links modified" talk page sections are no longer generated or monitored by InternetArchiveBot. No special action is required regarding these talk page notices, other than regular verification using the archive tool instructions below. Editors have permission to delete these "External links modified" talk page sections if they want to de-clutter talk pages, but see the RfC before doing mass systematic removals. This message is updated dynamically through the template {{source check}} (last update: 18 January 2022).

  • If you have discovered URLs which were erroneously considered dead by the bot, you can report them with this tool.
  • If you found an error with any archives or the URLs themselves, you can fix them with this tool.

Cheers.—cyberbot IITalk to my owner:Online 22:44, 4 April 2016 (UTC)[reply]

Why this example is needed?[edit]

I do not understand why the following example "Game" is needed in this article. This article is meant as a clear and concise description of the Swing widget toolkit not as a tutorial. Wikipedia articles provide information not serve as tutorials, there are other resources for that. If we take a look at the articles of other widget-toolkits I'm sure we won't find a "game-example".

Moreover the code in this example isn't very good Java code. It uses deprecated features and is certainly not well-written. The wording of the given explanation is also not clear and for some reason the text "File:C:\Users\Travor\Pictures\GameSample.png|thumb|class MoveObj run in Windows NT 6.2" has been inserted below it.--Furquanahmad (talk) 17:02, 13 May 2016 (UTC)[reply]

package org.travor.game;
import javax.swing.*;
import java.awt.event.*;

@SuppressWarnings("serial")
public class MoveObj extends JFrame {
	private JButton 
		obj=new JButton("obj"),
		up=new JButton("Up"),
		dn=new JButton("Down"),
		lf=new JButton("Left"),
		Rt=new JButton("Right");
	@SuppressWarnings("deprecation")
	public MoveObj(){
		super("Game");
		this.getContentPane().setLayout(null);
		this.setBounds(100, 50, 600, 620);
		this.setDefaultCloseOperation(EXIT_ON_CLOSE);
		this.add(makeObj());
		this.add(makeUpBtn());
		this.add(makeDnBtn());
		this.add(makeLfBtn());
		this.add(makeRtBtn());
		this.show();
	}
	private JButton makeObj(){
		obj.setBounds(0, 0, 60, 60);
		return obj;
	}
	private JButton makeUpBtn(){
		up.setBounds(0,500,100,60);
		up.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				Integer a=obj.getY();
				if(a.toString().equalsIgnoreCase("0"))
					return;
				obj.setLocation(obj.getX(),a-60);
			}
		});
		return up;
	}
	private JButton makeDnBtn(){
		dn.setBounds(100,500,100,60);
		dn.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				Integer a=obj.getY();
				if(a.toString().equalsIgnoreCase("420"))
					return;
				obj.setLocation(obj.getX(),a+60);
			}
		});
		return dn;
	}
	private JButton makeLfBtn(){
		lf.setBounds(200,500,100,60);
		lf.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				Integer a=obj.getX();
				if(a.toString().equalsIgnoreCase("0"))
					return;
				obj.setLocation(a-60,obj.getY());
			}
		});
		return lf;
	}
	private JButton makeRtBtn(){
		Rt.setBounds(300,500,100,60);
		Rt.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				Integer a=obj.getX();
				if(a.toString().equalsIgnoreCase("420"))
					return;
				obj.setLocation(a+60,obj.getY());
			}
		});
		return Rt;
	}
	public static void main(String[] args) {
		new MoveObj();
	}
}


History[edit]

I added people who were on the Swing team to the history, along with sources. However, one source was not accepted.[1] I am not sure if there is another way of finding the information.

References

  1. ^ Fowler, Amy. "Circa 1996". Aim's Blog.

JavaFX successor POV issue[edit]

There are currently three mentions in the article text to JavaFX as Swing's 'successor', which seems strange to me, as they have different goals. Also, as time has shown, Swing is still in the base JDK/JRE, while JavaFX was jettisoned into an independent library.

The successor claims seem to be uncited, and blame suggests the mentions were introduced arbitrarily by proponents of JavaFX. I propose removing them. Chabala (talk) 05:36, 20 March 2024 (UTC)[reply]