JCheckBoxTest.java Simple example illustrating the use of check boxes. import javax.swing.*; import java.awt.event.*; */ public class JCheckBoxTest extends JPanel implements ItemListener, ActionListener{ JCheckBox checkBox1, checkBox2; public JCheckBoxTest() { checkBox1 = new JCheckBox("Java Servlets"); checkBox2 = new JCheckBox("JavaServer Pages"); checkBox1.setContentAreaFilled(false); checkBox2.setContentAreaFilled(false); checkBox1.addItemListener(this); checkBox2.addActionListener(this); add(checkBox1); add(checkBox2); } public void actionPerformed(ActionEvent event) { System.out.println("JavaServer Pages selected: " + checkBox2.isSelected()); } public void itemStateChanged(ItemEvent event) { JCheckBox checkbox = (JCheckBox)event.getItem(); if (event.getStateChange() == ItemEvent.SELECTED) { System.out.println(checkbox.getText() + " selected."); } else { System.out.println(checkbox.getText() + " deselected."); } } public static void main(String[] args) { JPanel panel = new JCheckBoxTest(); WindowUtilities.setNativeLookAndFeel(); WindowUtilities.openInJFrame(panel, 300, 75); } }
Aug 25
Simple example illustrating the use of check boxes
Aug 25
Basic tool bar for holding multiple buttons.
BrowserToolBar.java A basic tool bar for holding multiple buttons. import java.awt.*; import javax.swing.*; /** Part of a small example showing basic use of JToolBar. * Creates a small dockable toolbar that is supposed to look * vaguely like one that might come with a Web browser. * Makes use of ToolBarButton, a small extension of JButton * that shrinks the margins around the icon and puts text * label, if any, below the icon. * */ public class BrowserToolBar extends JToolBar { public BrowserToolBar() { String[] imageFiles = { "Left.gif", "Right.gif", "RotCCUp.gif", "TrafficRed.gif", "Home.gif", "Print.gif", "Help.gif" }; String[] toolbarLabels = { "Back", "Forward", "Reload", "Stop", "Home", "Print", "Help" }; Insets margins = new Insets(0, 0, 0, 0); for(int i=0; i
Aug 25
Demonstrates the use of a JColorChooser which presents a dialog with three different tabbed panes to allow the user to select a color preference
Demonstrates the use of a JColorChooser which presents a dialog with three different tabbed panes to allow the user to select a color preference. The dialog returns a Color object based on the user’s selection or null if the user entered Cancel.
import java.awt.*; import java.awt.event.*; import javax.swing.*; /** Simple example illustrating the use of JColorChooser. * * . */ public class JColorChooserTest extends JFrame implements ActionListener { public static void main(String[] args) { new JColorChooserTest(); } public JColorChooserTest() { super("Using JColorChooser"); WindowUtilities.setNativeLookAndFeel(); addWindowListener(new ExitListener()); Container content = getContentPane(); content.setBackground(Color.white); content.setLayout(new FlowLayout()); JButton colorButton = new JButton("Choose Background Color"); colorButton.addActionListener(this); content.add(colorButton); setSize(300, 100); setVisible(true); } public void actionPerformed(ActionEvent e) { // Args are parent component, title, initial color. Color bgColor = JColorChooser.showDialog(this, "Choose Background Color", getBackground()); if (bgColor != null) getContentPane().setBackground(bgColor); } }
Aug 25
WebClient – Client application that can talk interactively to Web servers. Requires the components listed below
import java.awt.*; // For BorderLayout, GridLayout, Font, Color. import java.awt.event.*; import java.util.*; import javax.swing.*; /** A graphical client that lets you interactively connect to * Web servers and send custom request lines and * request headers. * * Taken from Core Web Programming from * Prentice Hall and Sun Microsystems Press, * . * © 2001 Marty Hall and Larry Brown; * may be freely used or adapted. */ public class WebClient extends JPanel implements Runnable, Interruptible, ActionListener { public static void main(String[] args) { WindowUtilities.setNativeLookAndFeel(); WindowUtilities.openInJFrame(new WebClient(), 600, 700, "Web Client", SystemColor.control); } private LabeledTextField hostField, portField, requestLineField; private JTextArea requestHeadersArea, resultArea; private String host, requestLine; private int port; private String[] requestHeaders = new String[30]; private JButton submitButton, interruptButton; private boolean isInterrupted = false; public WebClient() { setLayout(new BorderLayout(5, 30)); int fontSize = 14; Font labelFont = new Font("Serif", Font.BOLD, fontSize); Font headingFont = new Font("SansSerif", Font.BOLD, fontSize+4); Font textFont = new Font("Monospaced", Font.BOLD, fontSize-2); JPanel inputPanel = new JPanel(); inputPanel.setLayout(new BorderLayout()); JPanel labelPanel = new JPanel(); labelPanel.setLayout(new GridLayout(4,1)); hostField = new LabeledTextField("Host:", labelFont, 30, textFont); portField = new LabeledTextField("Port:", labelFont, "80", 5, textFont); // Use HTTP 1.0 for compatibility with the most servers. // If you switch this to 1.1, you *must* supply a // Host: request header. requestLineField = new LabeledTextField("Request Line:", labelFont, "GET / HTTP/1.0", 50, textFont); labelPanel.add(hostField); labelPanel.add(portField); labelPanel.add(requestLineField); JLabel requestHeadersLabel = new JLabel("Request Headers:"); requestHeadersLabel.setFont(labelFont); labelPanel.add(requestHeadersLabel); inputPanel.add(labelPanel, BorderLayout.NORTH); requestHeadersArea = new JTextArea(5, 80); requestHeadersArea.setFont(textFont); JScrollPane headerScrollArea = new JScrollPane(requestHeadersArea); inputPanel.add(headerScrollArea, BorderLayout.CENTER); JPanel buttonPanel = new JPanel(); submitButton = new JButton("Submit Request"); submitButton.addActionListener(this); submitButton.setFont(labelFont); buttonPanel.add(submitButton); inputPanel.add(buttonPanel, BorderLayout.SOUTH); add(inputPanel, BorderLayout.NORTH); JPanel resultPanel = new JPanel(); resultPanel.setLayout(new BorderLayout()); JLabel resultLabel = new JLabel("Results", JLabel.CENTER); resultLabel.setFont(headingFont); resultPanel.add(resultLabel, BorderLayout.NORTH); resultArea = new JTextArea(); resultArea.setFont(textFont); JScrollPane resultScrollArea = new JScrollPane(resultArea); resultPanel.add(resultScrollArea, BorderLayout.CENTER); JPanel interruptPanel = new JPanel(); interruptButton = new JButton("Interrupt Download"); interruptButton.addActionListener(this); interruptButton.setFont(labelFont); interruptPanel.add(interruptButton); resultPanel.add(interruptPanel, BorderLayout.SOUTH); add(resultPanel, BorderLayout.CENTER); } public void actionPerformed(ActionEvent event) { if (event.getSource() == submitButton) { Thread downloader = new Thread(this); downloader.start(); } else if (event.getSource() == interruptButton) { isInterrupted = true; } } public void run() { isInterrupted = false; if (hasLegalArgs()) new HttpClient(host, port, requestLine, requestHeaders, resultArea, this); } public boolean isInterrupted() { return(isInterrupted); } private boolean hasLegalArgs() { host = hostField.getTextField().getText(); if (host.length() == 0) { report("Missing hostname"); return(false); } String portString = portField.getTextField().getText(); if (portString.length() == 0) { report("Missing port number"); return(false); } try { port = Integer.parseInt(portString); } catch(NumberFormatException nfe) { report("Illegal port number: " + portString); return(false); } requestLine = requestLineField.getTextField().getText(); if (requestLine.length() == 0) { report("Missing request line"); return(false); } getRequestHeaders(); return(true); } private void report(String s) { resultArea.setText(s); } private void getRequestHeaders() { for(int i=0; i * LabeledTextField ltf = new LabeledTextField(...); * ltf.getLabel().someLabelMethod(...); *
*/ public JLabel getLabel() { return(label); } /** The TextField at the right side of the * LabeledTextField. */ public JTextField getTextField() { return(textField); } } Interruptible.java Polls to see if the user choose to interrupt the current network download. /** An interface for classes that can be polled to see * if they’ve been interrupted. Used by HttpClient * and WebClient to allow the user to interrupt a network * download. * * Taken from Core Web Programming from * Prentice Hall and Sun Microsystems Press, * . * © 2001 Marty Hall and Larry Brown; * may be freely used or adapted. */ public interface Interruptible { public boolean isInterrupted(); } NetworkClient.java Starting point for a network client to communicate with a remote computer. import java.net.*; import java.io.*; /** A starting point for network clients. You’ll need to * override handleConnection, but in many cases connect can * remain unchanged. It uses SocketUtil to simplify the * creation of the PrintWriter and BufferedReader. * * Taken from Core Web Programming from * Prentice Hall and Sun Microsystems Press, * © 2001 Marty Hall and Larry Brown; * may be freely used or adapted. */ public class NetworkClient { protected String host; protected int port; /** Register host and port. The connection won’t * actually be established until you call * connect. */ public NetworkClient(String host, int port) { this.host = host; this.port = port; } /** Establishes the connection, then passes the socket * to handleConnection. */ public void connect() { try { Socket client = new Socket(host, port); handleConnection(client); } catch(UnknownHostException uhe) { System.out.println(“Unknown host: ” + host); uhe.printStackTrace(); } catch(IOException ioe) { System.out.println(“IOException: ” + ioe); ioe.printStackTrace(); } } /** This is the method you will override when * making a network client for your task. * The default version sends a single line * (“Generic Network Client”) to the server, * reads one line of response, prints it, then exits. */ protected void handleConnection(Socket client) throws IOException { PrintWriter out = SocketUtil.getWriter(client); BufferedReader in = SocketUtil.getReader(client); out.println(“Generic Network Client”); System.out.println (“Generic Network Client:\n” + “Made connection to ” + host + ” and got ‘” + in.readLine() + “‘ in response”); client.close(); } /** The hostname of the server we’re contacting. */ public String getHost() { return(host); } /** The port connection will be made on. */ public int getPort() { return(port); } } SocketUtil.java: Provides utilities for wrapping a BufferedReader and PrintWriter around the Socket’s input and output streams, respectively. import java.net.*; import java.io.*; /** A shorthand way to create BufferedReaders and * PrintWriters associated with a Socket. * * Taken from Core Web Programming from * Prentice Hall and Sun Microsystems Press, * . * © 2001 Marty Hall and Larry Brown; * may be freely used or adapted. */ public class SocketUtil { /** Make a BufferedReader to get incoming data. */ public static BufferedReader getReader(Socket s) throws IOException { return(new BufferedReader( new InputStreamReader(s.getInputStream()))); } /** Make a PrintWriter to send outgoing data. * This PrintWriter will automatically flush stream * when println is called. */ public static PrintWriter getWriter(Socket s) throws IOException { // Second argument of true means autoflush. return(new PrintWriter(s.getOutputStream(), true)); } } WindowUtilities.java Simplifies the setting of native look and feel. import javax.swing.*; import java.awt.*; // For Color and Container classes. /** A few utilities that simplify using windows in Swing. * * Taken from Core Web Programming from * Prentice Hall and Sun Microsystems Press, * © 2001 Marty Hall and Larry Brown; * may be freely used or adapted. */ public class WindowUtilities { /** Tell system to use native look and feel, as in previous * releases. Metal (Java) LAF is the default otherwise. */ public static void setNativeLookAndFeel() { try { UIManager.setLookAndFeel( UIManager.getSystemLookAndFeelClassName()); } catch(Exception e) { System.out.println(“Error setting native LAF: ” + e); } } public static void setJavaLookAndFeel() { try { UIManager.setLookAndFeel( UIManager.getCrossPlatformLookAndFeelClassName()); } catch(Exception e) { System.out.println(“Error setting Java LAF: ” + e); } } public static void setMotifLookAndFeel() { try { UIManager.setLookAndFeel( “com.sun.java.swing.plaf.motif.MotifLookAndFeel”); } catch(Exception e) { System.out.println(“Error setting Motif LAF: ” + e); } } /** A simplified way to see a JPanel or other Container. Pops * up a JFrame with specified Container as the content pane. */ public static JFrame openInJFrame(Container content, int width, int height, String title, Color bgColor) { JFrame frame = new JFrame(title); frame.setBackground(bgColor); content.setBackground(bgColor); frame.setSize(width, height); frame.setContentPane(content); frame.addWindowListener(new ExitListener()); frame.setVisible(true); return(frame); } /** Uses Color.white as the background color. */ public static JFrame openInJFrame(Container content, int width, int height, String title) { return(openInJFrame(content, width, height, title, Color.white)); } /** Uses Color.white as the background color, and the * name of the Container’s class as the JFrame title. */ public static JFrame openInJFrame(Container content, int width, int height) { return(openInJFrame(content, width, height, content.getClass().getName(), Color.white)); } } ExitListener.java WindowListener for applications in this chapter. import java.awt.*; import java.awt.event.*; /** A listener that you attach to the top-level JFrame of * your application, so that quitting the frame exits the * application. * * Taken from Core Web Programming from * Prentice Hall and Sun Microsystems Press, * © 2001 Marty Hall and Larry Brown; * may be freely used or adapted. */ public class ExitListener extends WindowAdapter { public void windowClosing(WindowEvent event) { System.exit(0); } }
Aug 25
EchoServer.java A simple HTTP server that creates a Web page showing all data sent from the client (browser), including all HTTP request headers sent form the client. Uses the following classes
EchoServer.java A simple HTTP server that creates a Web page showing all data sent from the client (browser), including all HTTP request headers sent form the client. Uses the following classes:
import java.net.*; import java.io.*; import java.util.StringTokenizer; /** A simple HTTP server that generates a Web page showing all * of the data that it received from the Web client (usually * a browser). To use this server, start it on the system of * your choice, supplying a port number if you want something * other than port 8088. Call this system server.com. Next, * start a Web browser on the same or a different system, and * connect to http://server.com:8088/whatever. The resultant * Web page will show the data that your browser sent. For * debugging in servlet or CGI programming, specify * http://server.com:8088/whatever as the ACTION of your HTML * form. You can send GET or POST data; either way, the * resultant page will show what your browser sent. * * Taken from Core Web Programming from * Prentice Hall and Sun Microsystems Press, * . * © 2001 Marty Hall and Larry Brown; * may be freely used or adapted. */ public class EchoServer extends NetworkServer { protected int maxRequestLines = 50; protected String serverName = "EchoServer"; /** Supply a port number as a command-line * argument. Otherwise, use port 8088. */ public static void main(String[] args) { int port = 8088; if (args.length > 0) { try { port = Integer.parseInt(args[0]); } catch(NumberFormatException nfe) {} } new EchoServer(port, 0); } public EchoServer(int port, int maxConnections) { super(port, maxConnections); listen(); } /** Overrides the NetworkServer handleConnection method to * read each line of data received, save it into an array * of strings, then send it back embedded inside a PRE * element in an HTML page. */ public void handleConnection(Socket server) throws IOException{ System.out.println (serverName + ": got connection from " + server.getInetAddress().getHostName()); BufferedReader in = SocketUtil.getReader(server); PrintWriter out = SocketUtil.getWriter(server); String[] inputLines = new String[maxRequestLines]; int i; for (i=0; i\n" + "\n" + "\n" + " \n" + "\n" + "\n" + "\n" + " " + serverName + " Results \n" + "Here is the request line and request headers\n" + "sent by your browser:\n" + " "); } // Print bottom of a standard Web page. private void printTrailer(PrintWriter out) { out.println (" \n" + "\n" + "\n"); } // Normal Web page requests use GET, so this server can simply // read a line at a time. However, HTML forms can also use // POST, in which case we have to determine the number of POST // bytes that are sent so we know how much extra data to read // after the standard HTTP headers. private boolean usingPost(String[] inputs) { return(inputs[0].toUpperCase().startsWith("POST")); } private void readPostData(String[] inputs, int i, BufferedReader in) throws IOException { int contentLength = contentLength(inputs); char[] postData = new char[contentLength]; in.read(postData, 0, contentLength); inputs[++i] = new String(postData, 0, contentLength); } // Given a line that starts with Content-Length, // this returns the integer value specified. private int contentLength(String[] inputs) { String input; for (int i=0; iOverride this method in servers * you write. * * This generic version simply reports the host that made * the connection, shows the first line the client sent, * and sends a single line in response. */ protected void handleConnection(Socket server) throws IOException{ BufferedReader in = SocketUtil.getReader(server); PrintWriter out = SocketUtil.getWriter(server); System.out.println ("Generic Network Server: got connection from " + server.getInetAddress().getHostName() + "\n" + "with first line '" + in.readLine() + "'"); out.println("Generic Network Server"); server.close(); } /** Gets the max connections server will handle before * exiting. A value of 0 indicates that server should run * until explicitly killed. */ public int getMaxConnections() { return(maxConnections); } /** Sets max connections. A value of 0 indicates that server * should run indefinitely (until explicitly killed). */ public void setMaxConnections(int maxConnections) { this.maxConnections = maxConnections; } /** Gets port on which server is listening. */ public int getPort() { return(port); } /** Sets port. You can only do before "connect" is * called. That usually happens in the constructor. */ protected void setPort(int port) { this.port = port; } } SocketUtil.java Simplifies the creation of a PrintWriter and BufferedReader. import java.net.*; import java.io.*; /** A shorthand way to create BufferedReaders and * PrintWriters associated with a Socket. * * Taken from Core Web Programming from * Prentice Hall and Sun Microsystems Press, * © 2001 Marty Hall and Larry Brown; * may be freely used or adapted. */ public class SocketUtil { /** Make a BufferedReader to get incoming data. */ public static BufferedReader getReader(Socket s) throws IOException { return(new BufferedReader( new InputStreamReader(s.getInputStream()))); } /** Make a PrintWriter to send outgoing data. * This PrintWriter will automatically flush stream * when println is called. */ public static PrintWriter getWriter(Socket s) throws IOException { // Second argument of true means autoflush. return(new PrintWriter(s.getOutputStream(), true)); } }
Aug 25
StoppableThread.java A template to place a thread in a RUN, WAIT, or STOP state.
/** A template to control the state of a thread through setting * an internal flag. public class StoppableThread extends Thread { public static final int STOP = 0; public static final int RUN = 1; public static final int WAIT = 2; private int state = RUN; /** Public method to permit setting a flag to stop or * suspend the thread. The state is monitored through the * corresponding checkState method. */ public synchronized void setState(int state) { this.state = state; if (state==RUN) { notify(); } } /** Returns the desired state of the thread (RUN, STOP, WAIT). * Normally, you may want to change the state or perform some * other task if an InterruptedException occurs. */ private synchronized int checkState() { while (state==WAIT) { try { wait(); } catch (InterruptedException e) { } } return state; } /** An example of thread that will continue to run until * the creating object tells the thread to STOP. */ public void run() { while (checkState()!=STOP) { ... } } }
Aug 25
mall example showing the basic use of a JToolBar
mall example showing the basic use of a JToolBar import java.awt.*; import javax.swing.*; import java.awt.event.*; /** Small example showing basic use of JToolBar. * * */ public class JToolBarExample extends JFrame implements ItemListener { private BrowserToolBar toolbar; private JCheckBox labelBox; public static void main(String[] args) { new JToolBarExample(); } public JToolBarExample() { super("JToolBar Example"); WindowUtilities.setNativeLookAndFeel(); addWindowListener(new ExitListener()); Container content = getContentPane(); content.setBackground(Color.white); JPanel panel = new JPanel(new BorderLayout()); labelBox = new JCheckBox("Show Text Labels?"); labelBox.setHorizontalAlignment(SwingConstants.CENTER); labelBox.addItemListener(this); panel.add(new JTextArea(10,30), BorderLayout.CENTER); panel.add(labelBox, BorderLayout.SOUTH); toolbar = new BrowserToolBar(); content.add(toolbar, BorderLayout.NORTH); content.add(panel, BorderLayout.CENTER); pack(); setVisible(true); } public void itemStateChanged(ItemEvent event) { toolbar.setTextLabels(labelBox.isSelected()); pack(); } }
Aug 25
UrlRetriever2.java Illustrates how the URL class can simplify communication to an HTTP server.
UrlRetriever2.java Illustrates how the URL class can simplify communication to an HTTP server. import java.net.*; import java.io.*; /** Read a remote file using the standard URL class * instead of connecting explicitly to the HTTP server. * * Taken from Core Web Programming from * Prentice Hall and Sun Microsystems Press, * . * © 2001 Marty Hall and Larry Brown; * may be freely used or adapted. */ public class UrlRetriever2 { public static void main(String[] args) { checkUsage(args); try { URL url = new URL(args[0]); BufferedReader in = new BufferedReader( new InputStreamReader(url.openStream())); String line; while ((line = in.readLine()) != null) { System.out.println("> " + line); } in.close(); } catch(MalformedURLException mue) { // URL constructor System.out.println(args[0] + "is an invalid URL: " + mue); } catch(IOException ioe) { // Stream constructors System.out.println("IOException: " + ioe); } } private static void checkUsage(String[] args) { if (args.length != 1) { System.out.println("Usage: UrlRetriever2 "); System.exit(-1); } } }
Aug 25
RMI Example – Message, illustrates retrieving a message from an object located on a remote server. Requires the following classes
Rem.java Establishes which methods the client can access in the remote object. import java.rmi.*; /** The RMI client will use this interface directly. The RMI * server will make a real remote object that implements this, * then register an instance of it with some URL. * * Taken from Core Web Programming from * Prentice Hall and Sun Microsystems Press, * . * © 2001 Marty Hall and Larry Brown; * may be freely used or adapted. */ public interface Rem extends Remote { public String getMessage() throws RemoteException; } RemClient.java The client application which communicates to the remote object and retrieves the message. import java.rmi.*; // For Naming, RemoteException, etc. import java.net.*; // For MalformedURLException import java.io.*; // For Serializable interface /** Get a Rem object from the specified remote host. * Use its methods as though it were a local object. * * Taken from Core Web Programming from * Prentice Hall and Sun Microsystems Press, * . * © 2001 Marty Hall and Larry Brown; * may be freely used or adapted. */ public class RemClient { public static void main(String[] args) { try { String host = (args.length > 0) ? args[0] : "localhost"; // Get the remote object and store it in remObject: Rem remObject = (Rem)Naming.lookup("rmi://" + host + "/Rem"); // Call methods in remObject: System.out.println(remObject.getMessage()); } catch(RemoteException re) { System.out.println("RemoteException: " + re); } catch(NotBoundException nbe) { System.out.println("NotBoundException: " + nbe); } catch(MalformedURLException mfe) { System.out.println("MalformedURLException: " + mfe); } } } RemImpl.java The concrete, remote object that implements the methods in Rem.java. import java.rmi.*; import java.rmi.server.UnicastRemoteObject; /** This is the actual implementation of Rem that the RMI * server uses. The server builds an instance of this, then * registers it with a URL. The client accesses the URL and * binds the result to a Rem (not a RemImpl; it doesn't * have this). * * Taken from Core Web Programming from * Prentice Hall and Sun Microsystems Press, * . * © 2001 Marty Hall and Larry Brown; * may be freely used or adapted. */ public class RemImpl extends UnicastRemoteObject implements Rem { public RemImpl() throws RemoteException {} public String getMessage() throws RemoteException { return("Here is a remote message."); } } RemServer.java Creates an instance of RemImpl on the remote server and binds the object in the registry for lookup by the client. import java.rmi.*; import java.net.*; /** The server creates a RemImpl (which implements the Rem * interface), then registers it with the URL Rem, where * clients can access it. * * Taken from Core Web Programming from * Prentice Hall and Sun Microsystems Press, * . * © 2001 Marty Hall and Larry Brown; * may be freely used or adapted. */ public class RemServer { public static void main(String[] args) { try { RemImpl localObject = new RemImpl(); Naming.rebind("rmi:///Rem", localObject); } catch(RemoteException re) { System.out.println("RemoteException: " + re); } catch(MalformedURLException mfe) { System.out.println("MalformedURLException: " + mfe); } } }
Aug 25
Creates three common types of sliders
Creates three common types of sliders: one without tick marks, one with tick marks, and one with both tick marks and labels. import java.awt.*; import javax.swing.*; /** Simple example illustrating the use of JSliders, especially * the ability to specify tick marks and labels. * * */ public class JSliders extends JFrame { public static void main(String[] args) { new JSliders(); } public JSliders() { super("Using JSlider"); WindowUtilities.setNativeLookAndFeel(); addWindowListener(new ExitListener()); Container content = getContentPane(); content.setBackground(Color.white); JSlider slider1 = new JSlider(); slider1.setBorder(BorderFactory.createTitledBorder ("JSlider without Tick Marks")); content.add(slider1, BorderLayout.NORTH); JSlider slider2 = new JSlider(); slider2.setBorder(BorderFactory.createTitledBorder ("JSlider with Tick Marks")); slider2.setMajorTickSpacing(20); slider2.setMinorTickSpacing(5); slider2.setPaintTicks(true); content.add(slider2, BorderLayout.CENTER); JSlider slider3 = new JSlider(); slider3.setBorder(BorderFactory.createTitledBorder ("JSlider with Tick Marks & Labels")); slider3.setMajorTickSpacing(20); slider3.setMinorTickSpacing(5); slider3.setPaintTicks(true); slider3.setPaintLabels(true); content.add(slider3, BorderLayout.SOUTH); pack(); setVisible(true); } }