Java/TrafficSimulator/src/extra/jtable/JTableExamples.java

151 lines
4.2 KiB
Java

package extra.jtable;
import java.awt.BorderLayout;
import java.awt.Frame;
import java.awt.Color;
import java.awt.Dimension;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSpinner;
import javax.swing.JTable;
import javax.swing.SpinnerNumberModel;
import javax.swing.SwingUtilities;
import javax.swing.border.TitledBorder;
import javax.swing.border.Border;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;
//Vamos a sacar los datos de un ArrayList en un JTable
//Para esto necesitamos un modelo de tabla.
//Pues no siempre los datos van a venir en un array bidimensional
//
// In this example we will show the information stored in an List using
// a JTable
public class JTableExamples extends JFrame {
/**
*
*/
private static final long serialVersionUID = 1L;
private Border _defaultBorder = BorderFactory.createLineBorder(Color.red, 1);
private EventsTableModel _model;
private JTable _eventsTable;
private JButton addButton;
// this is what we show in the table
// esto es lo que mostramos en la table
private List<EventEx> _events;
private JSpinner _time;
private JComboBox<Integer> _priotiry;
public JTableExamples() {
super("JTable Example");
initGUI();
}
public void initGUI() {
JPanel mainPanel = new JPanel(new BorderLayout());
this.setContentPane(mainPanel);
JPanel buttonsPanel = new JPanel();
mainPanel.add(buttonsPanel, BorderLayout.PAGE_START);
// spinner for selecting time
_time = new JSpinner(new SpinnerNumberModel(10, 1, 10000, 1));
_time.setToolTipText("Simulation tick to run: 1-10000");
_time.setMaximumSize(new Dimension(80, 40));
_time.setMinimumSize(new Dimension(80, 40));
_time.setPreferredSize(new Dimension(80, 40));
// comboxfor selecting priority
_priotiry = new JComboBox<Integer>();
for (int i = 0; i < 10; i++) {
_priotiry.addItem(i);
}
addButton = new JButton("Add Event");
addButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
addEvent();
}
});
buttonsPanel.add( new JLabel("Time: "));
buttonsPanel.add(_time);
buttonsPanel.add( new JLabel("Priority: "));
buttonsPanel.add(_priotiry);
buttonsPanel.add(addButton);
// table
JPanel eventsPanel = new JPanel(new BorderLayout());
mainPanel.add(eventsPanel,BorderLayout.CENTER);
// add border
eventsPanel.setBorder(BorderFactory.createTitledBorder(_defaultBorder, "Events", TitledBorder.LEFT,
TitledBorder.TOP));
// the model
_model = new EventsTableModel();
_eventsTable = new JTable(_model);
eventsPanel.add(new JScrollPane(_eventsTable, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED));
// the actual events list
_events = new ArrayList<EventEx>();
_model.setEventsList(_events);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(700, 300);
pack();
setVisible(true);
}
public void addEvent() {
try {
Integer time = (Integer) _time.getValue();
Integer priority = (Integer) _priotiry.getSelectedItem();
_events.add(new EventEx(time, priority));
// avisamos al modelo de tabla para que se actualize. En la
// práctica esto no hace falta porque se le avisa directamente
// el TrafficSimulator
//
// We notify the table model that the list has been changed. This is not
// required in the assignment, it will be notified directly by the
// TrafficSimulator since it is an observer
//
_model.update();
} catch (Exception e) {
JOptionPane.showMessageDialog( //
(Frame) SwingUtilities.getWindowAncestor(this), //
"Something went wrong ...",
"ERROR", //
JOptionPane.ERROR_MESSAGE);
}
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new JTableExamples();
}
});
}
}