It’s possible to set the layout manager to null
: no layout control. You might do this to
position an object on the display at absolute coordinates. This is usually
not the right approach. Components might have different minimum sizes on
different platforms, so your interface would not be very portable.
The following example doesn’t use a layout manager and works with absolute coordinates instead:
//file: MoveButton.java
import
java.awt.*
;
import
java.awt.event.*
;
import
javax.swing.*
;
public
class
MoveButton
extends
JPanel
{
JButton
button
=
new
JButton
(
"I Move"
);
public
MoveButton
()
{
setLayout
(
null
);
add
(
button
);
button
.
setSize
(
button
.
getPreferredSize
());
button
.
setLocation
(
20
,
20
);
addMouseListener
(
new
MouseAdapter
()
{
public
void
mousePressed
(
MouseEvent
e
)
{
button
.
setLocation
(
e
.
getX
(),
e
.
getY
());
}
});
}
public
static
void
main
(
String
[]
args
)
{
JFrame
frame
=
new
JFrame
(
"MoveButton"
);
frame
.
setDefaultCloseOperation
(
JFrame
.
EXIT_ON_CLOSE
);
frame
.
setSize
(
250
,
200
);
frame
.
setLocation
(
200
,
200
);
frame
.
setContentPane
(
new
MoveButton
());
frame
.
setVisible
(
true
);
}
}
Click in the window area outside of the button to move the button to a new location. Try resizing the window and note that the button stays at a fixed position relative to the window’s upper-left corner.
Get Learning Java, 4th Edition now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.