JButton
and state of the selected button also. Below is the source code of a button example
ButtonEx.java
[java]package swing;//create a pacakge
import java.awt.Container;//import all the required pacakges
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;
import javax.swing.DefaultButtonModel;
import javax.swing.GroupLayout;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
public class ButtonEx extends JFrame {//created a class ButtonEx that should extend JFrame
private JButton okbtn;//created buttom
private JLabel enabledLbl;//created a label
private JLabel pressedLbl;//created a label
private JLabel armedLbl;//created a label
private JCheckBox cb;//created check box
public ButtonEx() {
initUI();//method
}
private void initUI() {
Container pane = getContentPane();
GroupLayout gl = new GroupLayout(pane);
pane.setLayout(gl);
okbtn = new JButton("OK");//created OK button
okbtn.addChangeListener(new DisabledChangeListener());//ChangeListener will be performed on the OK button and it focuses on the state of the button also.
cb = new JCheckBox();
cb.setAction(new CheckBoxAction());//check box state and action will be performed
enabledLbl = new JLabel("Enabled: true");//depends on the mode it will work
pressedLbl = new JLabel("Pressed: false");
armedLbl = new JLabel("Armed: false");
gl.setAutoCreateContainerGaps(true);
gl.setAutoCreateGaps(true);
gl.setHorizontalGroup(gl.createParallelGroup()
.addGroup(gl.createSequentialGroup()
.addComponent(okbtn)
.addGap(80)
.addComponent(cb))
.addGroup(gl.createParallelGroup()
.addComponent(enabledLbl)
.addComponent(pressedLbl)
.addComponent(armedLbl))
);
gl.setVerticalGroup(gl.createSequentialGroup()
.addGroup(gl.createParallelGroup()
.addComponent(okbtn)
.addComponent(cb))
.addGap(40)
.addGroup(gl.createSequentialGroup()
.addComponent(enabledLbl)
.addComponent(pressedLbl)
.addComponent(armedLbl))
);
pack();
setTitle("ButtonModel");
setLocationRelativeTo(null);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
private class DisabledChangeListener implements ChangeListener {
@Override
public void stateChanged(ChangeEvent e) {
DefaultButtonModel model = (DefaultButtonModel) okbtn.getModel();//if any model is not there automatically it can reserve.
if (model.isEnabled()) {
enabledLbl.setText("Enabled: true");
} else {
enabledLbl.setText("Enabled: false");
}
if (model.isArmed()) {
armedLbl.setText("Armed: true");
} else {
armedLbl.setText("Armed: false");
}
if (model.isPressed()) {
pressedLbl.setText("Pressed: true");
} else {
pressedLbl.setText("Pressed: false");
}
}
}
private class CheckBoxAction extends AbstractAction {
public CheckBoxAction() {
super("Disabled");
}
@Override
public void actionPerformed(ActionEvent e) {//action will be performed depends on the selected event.
if (okbtn.isEnabled()) {
okbtn.setEnabled(false);//depends on the user requirement it works.
} else {
okbtn.setEnabled(true);//to enable the OK button
}
}
}
public static void main(String[] args) {//here main method have been written.
EventQueue.invokeLater(new Runnable() {//The invokeLater() method places the application on the Swing Event Queue. It is used to ensure that all UI updates are concurrency-safe.
{
@Override
public void run() {
SimpleWindow sw = new SimpleWindow();//created the instance
sw.setVisible(true);//to visible the window
}
});
}
}
@Override
public void run() {
ButtonEx ex = new ButtonEx();
ex.setVisible(true);//it should always be true otherwise window will not be displayed.
}
});
}
}[/java]
Create a class that should extend from Jframe, create one button, three labels, check box.
[java]public class ButtonEx extends JFrame {
private JButton okbtn;
private JLabel enabledLbl;
private JLabel pressedLbl;
private JLabel armedLbl;
private JCheckBox cb;[/java]
Create a constructor that should be same as class name and write one method inside the constructor.
[java]public ButtonEx() {
initUI();//method
}[/java]
Create OK button and add changeListener to the button.ChangeListener will be performed on the OK button and it focuses on the state of the button also.
[java]okbtn = new JButton("OK");
okbtn.addChangeListener(new DisabledChangeListener());[/java]
Create the labels that are enabled, pressed, armed and create the gap between the components.
[java]enabledLbl = new JLabel("Enabled: true");
pressedLbl = new JLabel("Pressed: false");
armedLbl = new JLabel("Armed: false");
gl.setAutoCreateContainerGaps(true);
gl.setAutoCreateGaps(true);[/java]
Create the another class DisabledChangeListener that should implement ChangeListener and create default OK button.
[java]private class DisabledChangeListener implements ChangeListener
DefaultButtonModel model = (DefaultButtonModel) okbtn.getModel();[/java]
Create a class CheckBoxAction that should extend Abstraction and create a constructor with class name.
[java]private class CheckBoxAction extends AbstractAction {
public CheckBoxAction() {
super("Disabled");
}[/java]
When click on OK button it will be enabled and when click on disabled button all function will be disabled.
[java]if (okbtn.isEnabled()) {
okbtn.setEnabled(false);//depends on the user requirement it works.
} else {
okbtn.setEnabled(true);[/java]
Output:
After executing above code is successfully, output will be as follows.Here user can enable and disable the the OK button ,if it is enable then Boolean functions will be visible, otherwise another option is there that is disabled.
JList
, those model have been explained in the following examples such as ListModel and ListSelectionModel.Below is the source code of a ListModel example.
ListModelEx.java
[java]package swing;//create a package
import java.awt.Container;//import all the required pacakges
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.DefaultListModel;
import javax.swing.GroupLayout;
import static javax.swing.GroupLayout.Alignment.CENTER;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.ListSelectionModel;
public class ListModelEx extends JFrame {//create a class that should extend the JFrame
private DefaultListModel model;
private JList list;//created a list componet
private JButton remallbtn;//created a button
private JButton addbtn;//created a button
private JButton renbtn;//created a button
private JButton delbtn;//created a button
public ListModelEx() {
initUI();//method
}
private void createList() {
model = new DefaultListModel();//created a default model
model.addElement("SPlessons");//added element as SPlessons
model.addElement("iToolsInfo");//added element as iToolsInfo
model.addElement("Software");//added element as Software
model.addElement("Hardware");//added element as Hardware
model.addElement("Employee");//added element as Employee
list = new JList(model);
list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
list.addMouseListener(new MouseAdapter() {//MouseListener needs to be implemented when cursor is moved or pressed
@Override
public void mouseClicked(MouseEvent e) {
if (e.getClickCount() == 2) {
int index = list.locationToIndex(e.getPoint());
Object item = model.getElementAt(index);
String text = JOptionPane.showInputDialog("Rename item", item);
String newitem = null;
if (text != null) {//it means atleast there is one character other than white spaces
newitem = text.trim();
} else {
return;
}
if (!newitem.isEmpty()) {
model.remove(index);
model.add(index, newitem);
ListSelectionModel selmodel = list.getSelectionModel();
selmodel.setLeadSelectionIndex(index);
}
}
}
});
}
private void createButtons() {
remallbtn = new JButton("Remove All");
addbtn = new JButton("Add");
renbtn = new JButton("Rename");
delbtn = new JButton("Delete");
addbtn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String text = JOptionPane.showInputDialog("Add a new item");
String item = null;
if (text != null) {
item = text.trim();
} else {
return;
}
if (!item.isEmpty()) {
model.addElement(item);//to add the element
}
}
});
delbtn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent event) {
ListSelectionModel selmodel = list.getSelectionModel();
int index = selmodel.getMinSelectionIndex();
if (index >= 0) {
model.remove(index);//to remove the element
}
}
});
renbtn.addActionListener(new ActionListener() {//ActionListener needs to be implemented when event has happened.
@Override
public void actionPerformed(ActionEvent e) {
ListSelectionModel selmodel = list.getSelectionModel();
int index = selmodel.getMinSelectionIndex();
if (index == -1) {
return;
}
Object item = model.getElementAt(index);
String text = JOptionPane.showInputDialog("Rename item", item);
String newitem = null;
if (text != null) {
newitem = text.trim();
} else {
return;
}
if (!newitem.isEmpty()) {
model.remove(index);
model.add(index, newitem);//new item will be added
}
}
});
remallbtn.addActionListener(new ActionListener() {//to listen the selected event ActionListener interface is needed.
@Override
public void actionPerformed(ActionEvent e) {//depends on the selected event.
model.clear();
}
});
}
private void initUI() {
createList();
createButtons();
JScrollPane scrollpane = new JScrollPane(list);
Container pane = getContentPane();
GroupLayout gl = new GroupLayout(pane);
pane.setLayout(gl);
gl.setAutoCreateContainerGaps(true);
gl.setAutoCreateGaps(true);
gl.setHorizontalGroup(gl.createSequentialGroup()
.addComponent(scrollpane)
.addGroup(gl.createParallelGroup()
.addComponent(addbtn)
.addComponent(renbtn)
.addComponent(delbtn)
.addComponent(remallbtn))
);
gl.setVerticalGroup(gl.createParallelGroup(CENTER)
.addComponent(scrollpane)
.addGroup(gl.createSequentialGroup()
.addComponent(addbtn)
.addComponent(renbtn)
.addComponent(delbtn)
.addComponent(remallbtn))
);
gl.linkSize(addbtn, renbtn, delbtn, remallbtn);
pack();
setTitle("JList models");//created the title
setLocationRelativeTo(null);//it means the window should be in center of the screen
setDefaultCloseOperation(EXIT_ON_CLOSE);//needs to close the window
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
ListModelEx ex = new ListModelEx();
ex.setVisible(true);
}
});
}
}[/java]
Create a class that should extend from JFrame and create buttons by using JButton component.
[java]public class ListModelEx extends JFrame {//create a class that should extend the JFrame
private DefaultListModel model;
private JList list;
private JButton remallbtn;
private JButton addbtn;
private JButton renbtn;
private JButton delbtn;[/java]
Create the default list model and add the elements into the model such as message dialogues.
[java]model = new DefaultListModel();
model.addElement("SPlessons");
model.addElement("iToolsInfo");
model.addElement("Software");
model.addElement("Hardware");
model.addElement("Employee");[/java]
Set the selection mode ,where only single selection of an element is possible and add the listener to the list.This step is common to all operations such as Add, Rename, Delete, Remove All.
[java]list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
list.addMouseListener(new MouseAdapter()[/java]
Set the JOptionPane component,when click on Add button it displays input dialogue that is Add a new item.
[java]String text = JOptionPane.showInputDialog("Add a new item");[/java]
Output:
After executing the above code successfully, output will be as follows with four buttons and one text field.
In the output Add, Rename, Delete, Remove All elements will have their importance, where user can add and delete elements depends on the availability of the option. Following image shows that how to add the elements.