how to convert pdf to jpg in c# windows application : Change pdf security settings reader control software system azure windows wpf console javanotes6-linked29-part297

CHAPTER 6. INTRODUCTION TO GUI PROGRAMMING
277
value, the explosion ends and isExploding is reset to false. At random times, the sub switches
between moving to the left and moving to the right. Its direction of motion is recorded in the
sub’s isMovingLeft variable. The sub’s updateForNewFrame() method includes the lines
if ( Math.random() < 0.04 )
isMovingLeft = ! isMovingLeft;
There is a 1 in 25 chance that Math.random() will be less than 0.04, so the statement
“isMovingLeft = ! isMovingLeft” is executed in one in every twenty-five frames, on av-
erage. The effect of this statement is to reverse the value of isMovingLeft, from false to true
or from true to false. That is, the direction of motion of the sub is reversed.
In addition to changes in state that take place from one frame to the next, a few state
variables change when the user presses certain keys. In the program, this is checked in a
method that responds to user keystrokes. If the user presses the left or right arrow key, the
position of the boat is changed. If the user presses the down arrow key, the bomb changes
from not-falling to falling. This is coded in the keyPressed()method of a KeyListener that is
registered to listen for key events on the panel; that method reads as follows:
public void keyPressed(KeyEvent evt) {
int code = evt.getKeyCode(); // which key was pressed.
if (code == KeyEvent.VK
LEFT) {
// Move the boat left. (If this moves the boat out of the frame, its
// position will be adjusted in the boat.updateForNewFrame() method.)
boat.centerX -= 15;
}
else if (code == KeyEvent.VK
RIGHT) {
// Move the boat right. (If this moves boat out of the frame, its
// position will be adjusted in the boat.updateForNewFrame() method.)
boat.centerX += 15;
}
else if (code == KeyEvent.VK
DOWN) {
// Start the bomb falling, if it is not already falling.
if ( bomb.isFalling == false )
bomb.isFalling = true;
}
}
Note that it’s not necessary to call repaint() when the state changes, since this panel shows
an animation that is constantly being redrawn anyway. Any changes in the state will become
visible to the user as soon as the next frame is drawn. At some point in the program, I have
to make sure that the user does not move the boat off the screen. I could have done this in
keyPressed(), but I choose to check for this in another routine, in the boat object.
Iencourage you to read the source code inSubKillerPanel.java. Although a few points are
tricky, you should with some effort be able to read and understand the entire program. Try to
understand the program in terms of state machines. Note how the state of each of the three
objects in the program changes in response to events from the timer and from the user.
You should also note that the program uses four listeners, to respond to action events from
the timer, key events from the user, focus events, and mouse events. (The mouse is used only to
request the input focus when the user clicks the panel.) The timer runs only when the panel has
the input focus; this is programmed by having the focus listener start the timer when the panel
gains the input focus and stop the timer when the panel loses the input focus. All four listeners
Change pdf security settings reader - C# PDF Digital Signature Library: add, remove, update PDF digital signatures in C#.net, ASP.NET, MVC, WPF
Help to Improve the Security of Your PDF File by Adding Digital Signatures
pdf password encryption; change security settings pdf
Change pdf security settings reader - VB.NET PDF Digital Signature Library: add, remove, update PDF digital signatures in vb.net, ASP.NET, MVC, WPF
Guide VB.NET Programmers to Improve the Security of Your PDF File by Adding Digital Signatures
decrypt pdf file; decrypt pdf
CHAPTER 6. INTRODUCTION TO GUI PROGRAMMING
278
are created in the constructor of the SubKillerPanel class using anonymous inner classes. (See
Subsection 6.4.5.)
While it’s not at all sophisticated as arcade games go, the SubKiller game does use some
interesting programming. And it nicely illustrates how to apply state-machine thinking in
event-oriented programming.
6.6 Basic Components
I
n preceding sections, you’ve seen how to use a graphics context to draw on the screen
(online)
and how to handle mouse events and keyboard events. In one sense, that’s all there is to
GUI programming. If you’re willing to program all the drawing and handle all the mouse and
keyboard events, you have nothing more to learn. However, you would either be doing a lot
more work than you need to do, or you would be limiting yourself to very simple user interfaces.
Atypical user interface uses standard GUI components such as buttons, scroll bars, text-input
boxes, and menus. These components have already been written for you, so you don’t have to
duplicate the work involved in developing them. They know how to draw themselves, and they
can handle the details of processing the mouse and keyboard events that concern them.
Consider one of the simplest user interface components, a push button. The button has a
border, and it displays some text. This text can be changed. Sometimes the button is disabled,
so that clicking on it doesn’t have any effect. When it is disabled, its appearance changes. When
the user clicks on the push button, the button changes appearance while the mouse button is
pressed and changes back when the mouse button is released. In fact, it’s more complicated
than that. If the user moves the mouse outside the push button before releasing the mouse
button, the button changes to its regular appearance. To implement this, it is necessary to
respond to mouse exit or mouse drag events. Furthermore, on many platforms, a button can
receive the input focus. The button changes appearance when it has the focus. If the button
has the focus and the user presses the space bar, the button is triggered. This means that the
button must respond to keyboard and focus events as well.
Fortunately, you don’t have to program any of this, provided you use an object belonging
to the standard class javax.swing.JButton. A JButton object draws itself and processes
mouse, keyboard, and focus events on its own. You only hear from the JButton when the
user triggers it by clicking on it or pressing the space bar while the button has the input
focus. When this happens, the JButton object creates an event object belonging to the class
java.awt.event.ActionEvent. The event object is sent to any registered listeners to tell them
that the button has been pushed. Your program gets only the information it needs—the fact
that a button was pushed.
∗ ∗ ∗
The standard components that are defined as part of the Swing graphical user interface
API are defined by subclasses of the class JComponent, which is itself a subclass of Component.
(Note that this includes the JPanel class that we have already been working with extensively.)
Many useful methods are defined in the Component and JComponent classes and so can be used
with any Swing component. We begin by looking at a few of these methods. Suppose that comp
is a variable that refers to some JComponent. Then the following methods can be used:
•comp.getWidth() and comp.getHeight() are functions that give the current size of the
component, in pixels. One warning: When a component is first created, its size is zero.
The size will be set later, probably by a layout manager. A common mistake is to check
VB.NET PDF Password Library: add, remove, edit PDF file password
RasterEdge XDoc.PDF SDK provides some PDF security settings about password to help protect your PDF document Add password to PDF. Change PDF original password.
create encrypted pdf; change pdf security settings
C# PDF Password Library: add, remove, edit PDF file password in C#
Able to change password on adobe PDF document in C#.NET. To help protect your PDF document in C# project, XDoc.PDF provides some PDF security settings.
pdf password unlock; create encrypted pdf
CHAPTER 6. INTRODUCTION TO GUI PROGRAMMING
279
the size of a component before that size has been set, such as in a constructor.
•comp.setEnabled(true) and comp.setEnabled(false) canbe used to enable anddisable
the component. When a component is disabled, its appearance might change, and the user
cannot do anything with it. There is a boolean-valued function, comp.isEnabled() that
you can call to discover whether the component is enabled.
•comp.setVisible(true) and comp.setVisible(false) can be called to hide or show the
component.
•comp.setFont(font) sets the font that is used for text displayed on the component. See
Subsection 6.3.3foradiscussionoffonts.
•comp.setBackground(color) and comp.setForeground(color) set the background and
foreground colors for the component. SeeSubsection6.3.2.
•comp.setOpaque(true) tells the component that the area occupied by the component
should be filled with the component’s background color before the content of the com-
ponent is painted. By default, only JLabels are non-opaque. A non-opaque, or “trans-
parent”, component ignores its background color and simply paints its content over the
content of its container. This usually means that it inherits the background color from its
container.
•comp.setToolTipText(string) sets the specified string as a “tooltip” for thecomponent.
The tool tip is displayed if the mouse cursor is in the component and the mouse is not
moved for a few seconds. The tool tip should give some information about the meaning
of the component or how to use it.
•comp.setPreferredSize(size) sets the size at which the component should be displayed,
if possible. The parameter is of type java.awt.Dimension, where an object of type Di-
mension has two public integer-valued instance variables, width and height. A call to this
method usually looks something like “setPreferredSize( new Dimension(100,50) )”.
The preferred size is used as a hint by layout managers, but will not be respected in all
cases. Standard components generally compute a correct preferred size automatically, but
it can be useful to set it in some cases. For example, if you use a JPanel as a drawing
surface, it is usually a good idea to set a preferred size for it.
Note that using any component is a multi-step process. The component object must be
created with a constructor. It must be added to a container. In many cases, a listener must
be registered to respond to events from the component. And in some cases, a reference to the
component must be saved in an instance variable so that the component can be manipulated by
the program after it has been created. In this section, we will look at a few of the basic standard
components that are available in Swing. In the next section we will consider the problem of
laying out components in containers.
6.6.1 JButton
An object of class JButton is a push buttonthat the user canclick to trigger some action. You’ve
already seen buttons used inSection6.1 andSection6.2, but we consider them in much more
detail here. To use any component effectively, there are several aspects of the corresponding
class that youshould be familiar with. For JButton, as an example, Ilist these aspects explicitly:
•Constructors: The JButton class has a constructor that takes a string as a parameter.
This string becomes the text displayed on the button. For example: stopGoButton =
VB.NET PDF Library SDK to view, edit, convert, process PDF file
PDF Document Protection. XDoc.PDF SDK allows users to perform PDF document security settings in VB.NET program. Password, digital
add security to pdf document; create pdf security
C# HTML5 Viewer: Deployment on AzureCloudService
RasterEdge.XDoc.PDF.HTML5Editor.dll. system.webServer> <validation validateIntegratedModeConfiguration="false"/> <security> <requestFiltering
change pdf security settings reader; convert secure webpage to pdf
CHAPTER 6. INTRODUCTION TO GUI PROGRAMMING
280
new JButton("Go"). This creates a button object that will display the text, “Go” (but
remember that the button must still be added to a container before it can appear on the
screen).
•Events: When the user clicks on a button, the button generates an event of type Action-
Event. This event is sent to any listener that has been registered with the button as an
ActionListener.
•Listeners: An object that wants to handle events generated by buttons must imple-
ment the ActionListener interface. This interface defines just one method, “public void
actionPerformed(ActionEvent evt)”, which is called to notify the object of an action
event.
•Registration of Listeners: In order to actually receive notification of an event from a
button, an ActionListener must be registered with the button. This is done with the but-
ton’s addActionListener() method. For example: stopGoButton.addActionListener(
buttonHandler );
•Event methods: When actionPerformed(evt) is called by the button, the parameter,
evt, contains information about the event. This information can be retrieved by calling
methods in the ActionEvent class. In particular, evt.getActionCommand() returns a
String giving the command associated with the button. By default, this command is the
text that is displayed on the button, but it is possible to set it to some other string. The
method evt.getSource() returns a reference to the Object that produced the event,
that is, to the JButton that was pressed. The return value is of type Object, not JButton,
because other types of components can also produce ActionEvents.
•Component methods: Several useful methods are defined in the JButton class. For
example, stopGoButton.setText("Stop") changes the text displayed on the button to
“Stop”. And stopGoButton.setActionCommand("sgb") changes the action command
associated with this button for action events.
Of course, JButtons also have all the general Component methods, such as setEnabled()
and setFont(). The setEnabled() and setText() methods of a button are particularly useful
for giving the user information about what is going on in the program. A disabled button is
better than a button that gives an obnoxious error message such as “Sorry, you can’t click on
me now!”
6.6.2 JLabel
JLabel is certainly the simplest type of component. An object of type JLabel exists just to
display a line of text. The text cannot be edited by the user, although it can be changed by
your program. The constructor for a JLabel specifies the text to be displayed:
JLabel message = new JLabel("Hello World!");
There is another constructor that specifies where in the label the text is located, if there is
extra space. The possible alignments are given by the constants JLabel.LEFT, JLabel.CENTER,
and JLabel.RIGHT. For example,
JLabel message = new JLabel("Hello World!", JLabel.CENTER);
creates a label whose text is centered in the available space. You can change the text displayed
in a label by calling the label’s setText() method:
message.setText("Goodbye World!");
C# HTML5 Viewer: Deployment on ASP.NET MVC
RasterEdge.XDoc.PDF.HTML5Editor.dll. system.webServer> <validation validateIntegratedModeConfiguration="false"/> <security> <requestFiltering
create secure pdf; convert locked pdf to word online
C# Imaging - Decode Code 93 Barcode in C#.NET
the purpose to provide a higher density and data security enhancement to Load an image or a document(PDF, TIFF, Word, Excel Set the barcode reader settings.
decrypt pdf file online; decrypt password protected pdf
CHAPTER 6. INTRODUCTION TO GUI PROGRAMMING
281
Since the JLabel class is a subclass of JComponent, you can use methods such as
setForeground() and setFont() with labels. If you want the background color to have any
effect, you should call setOpaque(true) on the label, since otherwise the JLabel might not fill
in its background. For example:
JLabel message = new JLabel("Hello World!", JLabel.CENTER);
message.setForeground(Color.RED);
// Display red text...
message.setBackground(Color.BLACK); //
on a black background...
message.setFont(new Font("Serif",Font.BOLD,18)); // in a big bold font.
message.setOpaque(true); // Make sure background is filled in.
6.6.3 JCheckBox
AJCheckBox is a component that has two states: selected or unselected. The user can change
the state of a check box by clicking on it. The state of a checkbox is represented by a boolean
value that is true if the box is selected and is false if the box is unselected. A checkbox has
alabel, which is specified when the box is constructed:
JCheckBox showTime = new JCheckBox("Show Current Time");
Usually, it’s the user who sets the state of a JCheckBox, but you can also set the state
in your program. The current state of a checkbox is set using its setSelected(boolean)
method. For example, if you want the checkbox showTime to be checked, you would say
“showTime.setSelected(true)". Touncheck the box,say “showTime.setSelected(false)".
You can determine the current state of a checkbox by calling its isSelected() method, which
returns a boolean value.
In many cases, you don’t need to worry about events from checkboxes. Your program can
just check the state whenever it needs to know it by calling the isSelected() method. However,
acheckbox does generate anevent when its state is changed by the user, and you can detect this
event and respond to it if you want something to happen at themoment thestatechanges. When
the state of a checkbox is changed by the user, it generates an event of type ActionEvent. If you
want something to happen when the user changes the state, you must register an ActionListener
with the checkbox by calling its addActionListener() method. (Note that if you change
the state by calling the setSelected() method, no ActionEvent is generated. However, there
is another method in the JCheckBox class, doClick(), which simulates a user click on the
checkbox and does generate an ActionEvent.)
When handling an ActionEvent, you can call evt.getSource() in the actionPerformed()
method to find out which object generated the event. (Of course, if you are only listening for
events from one component, you don’t have to do this.) The returned value is of type Object,
but you can type-cast it to another type if you want. Once you know the object that generated
the event, you can ask the object to tell you its current state. For example, if you know that
the event had to come from one of two checkboxes, cb1 or cb2, then your actionPerformed()
method might look like this:
public void actionPerformed(ActionEvent evt) {
Object source = evt.getSource();
if (source == cb1) {
boolean newState = cb1.isSelected();
... // respond to the change of state
}
else if (source == cb2) {
C# Image: C# Code to Upload TIFF File to Remote Database by Using
Website project and select WSE Settings 3.0. using System.Security.Cryptography; private void tsbUpload_Click & profession imaging controls, PDF document, image
pdf security; pdf security remover
VB Imaging - VB Codabar Generator
check digit function for user's security consideration. also creates Codabar bar code on PDF, WORD, TIFF Able to adjust parameter settings before encoding, like
pdf password encryption; pdf password security
CHAPTER 6. INTRODUCTION TO GUI PROGRAMMING
282
boolean newState = cb2.isSelected();
... // respond to the change of state
}
}
Alternatively, you can use evt.getActionCommand() to retrieve the action command asso-
ciated with the source. For a JCheckBox, the action command is, by default, the label of the
checkbox.
6.6.4 JTextField and JTextArea
The JTextField andJTextAreaclasses represent components that contain text that canbe edited
by the user. A JTextField holds a single line of text, while a JTextArea can hold multiple lines.
It is also possible to set a JTextField or JTextArea to be read-only so that the user can read the
text that it contains but cannot edit the text. Both classes are subclasses of an abstract class,
JTextComponent, which defines their common properties.
JTextField and JTextArea have many methods in common. The instance method setText(),
which takes a parameter of type String, can be used to change the text that is displayed in an
input component. The contents of the component can be retrieved by calling its getText()
instance method, which returns a value of type String. If you want to stop the user from
modifying the text, you can call setEditable(false). Call the same method with a parameter
of true to make the input component user-editable again.
The user can only type into a text component when it has the input focus. The user can
give the input focus to a text component by clicking it with the mouse, but sometimes it is
useful to give the input focus to a text field programmatically. You can do this by calling its
requestFocus() method. For example, when I discover an error in the user’s input, I usually
call requestFocus() on the text field that contains the error. This helps the user see where
the error occurred and lets the user start typing the correction immediately.
By default, there is no space between the text in a text component and the edge of the
component, which usually doesn’t look very good. You can use the setMargin() method of
the component to add some blank space between the edge of the component and the text.
This method takes a parameter of type java.awt.Insets which contains four integer instance
variables that specify the margins on the top, left, bottom, and right edge of the component.
For example,
textComponent.setMargin( new Insets(5,5,5,5) );
adds a five-pixel margin between the text in textComponent and each edge of the component.
∗ ∗ ∗
The JTextField class has a constructor
public JTextField(int columns)
where columns is an integer that specifies the number of characters that should be visible in the
text field. This is used to determine the preferred width of the text field. (Because characters
can be of different sizes and because the preferred width is not always respected, the actual
number of characters visible in the text field might not be equal to columns.) You don’t have to
specify the number of columns; for example, you might use the text field in a context where it
will expand to fill whatever space is available. In that case, you can use the default constructor
JTextField(), with no parameters. You can also use the following constructors, which specify
the initial contents of the text field:
CHAPTER 6. INTRODUCTION TO GUI PROGRAMMING
283
public JTextField(String contents);
public JTextField(String contents, int columns);
The constructors for a JTextArea are
public JTextArea()
public JTextArea(int rows, int columns)
public JTextArea(String contents)
public JTextArea(String contents, int rows, int columns)
The parameter rows specifies how many lines of text should be visible in the text area. This
determines the preferred height of the text area, just as columns determines the preferred width.
However, the text area can actually contain any number of lines; the text area can be scrolled
to reveal lines that are not currently visible. It is common to use a JTextArea as the CENTER
component of a BorderLayout. In that case, it is less useful to specify the number of lines and
columns, since the TextArea will expand to fill all the space available in the center area of the
container.
The JTextArea class adds a few useful methods to those inherited from JTextComponent.
For example, the instance method append(moreText), where moreText is of type String, adds
the specified text at the end of the current content of the text area. (When using append()
or setText() to add text to a JTextArea, line breaks can be inserted in the text by using the
newline character, ’\n’.) And setLineWrap(wrap), where wrap is of type boolean, tells what
should happen when a line of text is too long to be displayed in the text area. If wrap is true,
then any line that is too long will be “wrapped” onto the next line; if wrap is false, the line will
simply extend outside the text area, and the user will have to scroll the text area horizontally
to see the entire line. The default value of wrap is false.
Since it might be necessary to scroll a text area to see all the text that it contains, you might
expect a text area to come with scroll bars. Unfortunately, this does not happen automatically.
To get scroll bars for a text area, you have to put the JTextArea inside another component,
called a JScrollPane. This can be done as follows:
JTextArea inputArea = new JTextArea();
JScrollPane scroller = new JScrollPane( inputArea );
The scroll pane provides scroll bars that can be used to scroll the text in the text area. The
scroll bars will appear only whenneeded, that is when the size of the text exceeds the size of the
text area. Note that when you want to put the text area into a container, you should add the
scroll pane, not the text area itself, to the container. See the short exampleTextAreaDemo.java
for an example of using a text area.
∗ ∗ ∗
When the user is typing in a JTextField and presses return, an ActionEvent is generated.
If you want to respond to such events, you can register an ActionListener with the text field,
using the text field’s addActionListener() method. (Since a JTextArea can contain multiple
lines of text, pressing return in a text area does not generate an event; it simply begins a new
line of text.)
JTextField has a subclass, JPasswordField, which is identical except that it does not reveal
the text that it contains. The characters in a JPasswordField are all displayed as asterisks (or
some other fixed character). A password field is, obviously, designed to let the user enter a
password without showing that password on the screen.
Text components are actually quite complex, and I have covered only their most basic
properties here. I will return to the topic of text components inSubsection13.4.4.
CHAPTER 6. INTRODUCTION TO GUI PROGRAMMING
284
6.6.5 JComboBox
The JComboBox class provides a way to let the user select one option from a list of options.
The options are presented as a kind of pop-up menu, and only the currently selected option is
visible on the screen.
When a JComboBox object is first constructed, it initially contains no items. An item
is added to the bottom of the list of options by calling the combo box’s instance method,
addItem(str), where str is the string that will be displayed in the menu.
For example, the following code will create an object of type JComboBox that contains the
options Red, Blue, Green, and Black:
JComboBox colorChoice = new JComboBox();
colorChoice.addItem("Red");
colorChoice.addItem("Blue");
colorChoice.addItem("Green");
colorChoice.addItem("Black");
You can call the getSelectedIndex() method of a JComboBox to find out which item
is currently selected. This method returns an integer that gives the position of the selected
item in the list, where the items are numbered starting from zero. Alternatively, you can call
getSelectedItem() to get the selected item itself. (This method returns a value of type Object,
since a JComboBox can actually hold other types of objects besides strings.) You can change
the selection by calling the method setSelectedIndex(n), where n is an integer giving the
position of the item that you want to select.
The most commonway to use a JComboBox is to callits getSelectedIndex() method when
you have a need to know which item is currently selected. However, like other components that
we have seen, JComboBox components generate ActionEvents when the user selects an item.
You can register an ActionListener with the JComboBox if you want to respond to such events
as they occur.
JComboBoxes have a nifty feature, which is probably not all that useful in practice. You can
make a JComboBox “editable” by calling its method setEditable(true). If you do this, the
user can edit the selection by clicking on the JComboBox and typing. This allows the user to
make a selection that is not in the pre-configured list that you provide. (The “Combo” in the
name “JComboBox” refers to the fact that it’s a kind of combination of menu and text-input
box.) If the user has edited the selection in this way, then the getSelectedIndex() method
will return the value -1, and getSelectedItem() will return the string that the user typed.
An ActionEvent is triggered if the user presses return while typing in the JComboBox.
6.6.6 JSlider
AJSlider provides a way for the user to select an integer value from a range of possible values.
The user does this by dragging a “knob” along a bar. A slider can, optionally, be decorated
with tick marks and with labels. This picture shows three sliders with different decorations and
with different ranges of values:
CHAPTER 6. INTRODUCTION TO GUI PROGRAMMING
285
Here, the second slider is decorated with ticks, and the third one is decorated with labels. It’s
possible for a single slider to have both types of decorations.
The most commonly used constructor for JSliders specifies the start and end of the range
of values for the slider and its initial value when it first appears on the screen:
public JSlider(int minimum, int maximum, int value)
If the parameters are omitted, the values 0, 100, and50 are used. By default, a slider is horizon-
tal, but you can make it vertical by calling its method setOrientation(JSlider.VERTICAL).
The current value of a JSlider can be read at any time with its getValue() method, which
returns a value of type int. If you want to change the value, you can do so with the method
setValue(n), which takes a parameter of type int.
If you want to respond immediately when the user changes the value of a slider, you can
register a listener with the slider. JSliders, unlike other components we have seen, do not
generate ActionEvents. Instead, they generate events of type ChangeEvent. ChangeEvent and
related classes are defined in the package javax.swing.event rather than java.awt.event, so
if you want to use ChangeEvents, you should import javax.swing.event.* at the beginning
of your program. You must also define some object to implement the ChangeListener interface,
and you must register the change listener with the slider by calling its addChangeListener()
method. A ChangeListener must provide a definition for the method:
public void stateChanged(ChangeEvent evt)
This method will be called whenever the value of the slider changes. Note that it will also
be called when you change the value with the setValue() method, as well as when the user
changes the value. In the stateChanged() method, you can call evt.getSource() to find
out which object generated the event. If you want to know whether the user generated the
change event, call the slider’s getValueIsAdjusting() method, which returns true if the user
is dragging the knob on the slider.
Using tick marks on a slider is a two-step process: Specify the interval between the tick
marks, and tell the slider that the tick marks should be displayed. There are actually two
types of tick marks, “major” tick marks and “minor” tick marks. You can have one or
the other or both. Major tick marks are a bit longer than minor tick marks. The method
setMinorTickSpacing(i) indicates that there should be a minor tick mark every i units along
the slider. The parameter is an integer. (The spacing is in terms of values on the slider, not
pixels.) For the major tick marks, there is a similar command, setMajorTickSpacing(i).
Calling these methods is not enough to make the tick marks appear. You also have to call
setPaintTicks(true). For example, the second slider in the above picture was created and
configured using the commands:
slider2 = new JSlider(); // (Uses default min, max, and value.)
slider2.addChangeListener(this);
slider2.setMajorTickSpacing(25);
slider2.setMinorTickSpacing(5);
slider2.setPaintTicks(true);
Labels on a slider are handled similarly. You have to specify the labels and tell the slider to
paint them. Specifying labels is a tricky business, but the JSlider class has a method to simplify
it. You can create a set of labels and add them to a slider named sldr with the command:
sldr.setLabelTable( sldr.createStandardLabels(i) );
CHAPTER 6. INTRODUCTION TO GUI PROGRAMMING
286
where i is an integer giving the spacing between the labels. To arrange for the labels to be
displayed, call setPaintLabels(true). For example, the third slider in the above picture was
created and configured with the commands:
slider3 = new JSlider(2000,2100,2006);
slider3.addChangeListener(this);
slider3.setLabelTable( slider3.createStandardLabels(50) );
slider3.setPaintLabels(true);
6.7 Basic Layout
C
omponents are the fundamental building blocks of a graphical user interface. But you have
(online)
to do more with components besides create them. Another aspect of GUI programming is
laying out components on the screen, that is, deciding where they are drawn and how big
they are. You have probably noticed that computing coordinates can be a difficult problem,
especially if you don’t assume a fixed size for the drawing area. Java has a solution for this, as
well.
Components are the visible objects that make up a GUI. Some components are containers,
which can hold other components. Containers in Java are objects that belong to some subclass
of java.awt.Container. The content pane of a JApplet or JFrame is an example of a container.
The standard class JPanel, which we have mostly used as a drawing surface up until now, is
another example of a container.
Because a JPanel object is a container, it can hold other components. Because a JPanel is
itself a component, you can add a JPanel to another JPanel. This makes complex nesting of
components possible. JPanels can be used to organize complicated user interfaces, as shown in
this illustration:
Three panels, shown in color,
containing six other components,
shown in gray.
The components in a container must be “laid out,” which means setting their sizes and
positions. It’s possible to program the layout yourself, but layout is ordinarily done by a
layout manager. A layout manager is an object associated with a container that implements
some policy for laying out the components in that container. Different types of layout manager
Documents you may be interested
Documents you may be interested