Java UI-komponentit (JTable) Juha Järvensivu juha.jarvensivu@tut.fi 2007



Samankaltaiset tiedostot
Java UI-komponentit (JTable) Juha Järvensivu 2008

Java layoutit. Juha Järvensivu 2007

Olio-ohjelmointi Käyttöliittymä

Laskennallisesti Älykkäät Järjestelmät. Sumean kmeans ja kmeans algoritmien vertailu

Pino S on abstrakti tietotyyppi, jolla on ainakin perusmetodit:

JAVA-OHJELMOINTI 3 op A274615

Listarakenne (ArrayList-luokka)

812341A Olio-ohjelmointi Peruskäsitteet jatkoa

Ohjelmointi 2 / 2010 Välikoe / 26.3

Tapahtumapohjainen ohjelmointi. Juha Järvensivu 2007

Mikä yhteyssuhde on?

JAVA-PERUSTEET. JAVA-OHJELMOINTI 3op A JAVAN PERUSTEET LYHYT KERTAUS JAVAN OMINAISUUKSISTA JAVAN OMINAISUUKSIA. Java vs. C++?

18. Abstraktit tietotyypit 18.1

Java kahdessa tunnissa. Jyry Suvilehto

Rajapinta (interface)

Luokan sisällä on lista

Tehtävä 1. Tietojen lisääminen, poistaminen, päivittäminen ja tulostaminen

TIETORAKENTEET JA ALGORITMIT

1 Tehtävän kuvaus ja analysointi

Sisältö. 22. Taulukot. Yleistä. Yleistä

Java-API, rajapinnat, poikkeukset, UML,...

A TIETORAKENTEET JA ALGORITMIT

Olio-ohjelmointi Javalla

Ohjelmointiharjoituksia Arduino-ympäristössä

3. Binääripuu, Java-toteutus

Teskstialue (JTextArea) ja Scrollaus (JScrollPane)

Sisältö. 2. Taulukot. Yleistä. Yleistä

Yleistä. Nyt käsitellään vain taulukko (array), joka on saman tyyppisten muuttujien eli alkioiden (element) kokoelma.

Sisällys. 18. Abstraktit tietotyypit. Johdanto. Johdanto

15. Ohjelmoinnin tekniikkaa 15.1

Tietorakenteet. JAVA-OHJELMOINTI Osa 5: Tietorakenteita. Sisällys. Merkkijonot (String) Luokka String. Metodeja (public)

List-luokan soveltamista. Listaan lisääminen Listan läpikäynti Listasta etsiminen Listan sisällön muuttaminen Listasta poistaminen Listan kopioiminen

16. Javan omat luokat 16.1

A) on käytännöllinen ohjelmointitekniikka. = laajennetaan aikaisemmin tehtyjä luokkia (uudelleenkäytettävyys)

Osio 4: Graafinen käyttöliittymä

Harjoitus Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

HSMT Tietokannoista. Ville Leppänen. HSMT, c Ville Leppänen, IT, Turun yliopisto, 2008 p.1/32

812336A C++ -kielen perusteet,

Metodien tekeminen Javalla

Java-kielen perusteet

Kompositio. Mikä komposition on? Kompositio vs. yhteyssuhde Kompositio Javalla Konstruktorit set-ja get-metodit tostring-metodi Pääohjelma

Suunnittelumalleja, MVC. Juha Järvensivu 2008

Java ja tietokannan käsittely (JDBC)

Tehtävä 1. Tehtävä 2. Arvosteluperusteet Koherentti selitys Koherentti esimerkki

Java ja grafiikka. Ville Sundberg

Ohjelmointi 2 / 2008 Välikoe / Pöytätestaa seuraava ohjelma.

Tietorakenteet, laskuharjoitus 3, ratkaisuja

Luokan muodostimet (Constructors)

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Taulukot & Periytyminen

YHTEYSSUHDE (assosiation)

1.3Lohkorakenne muodostetaan käyttämällä a) puolipistettä b) aaltosulkeita c) BEGIN ja END lausekkeita d) sisennystä

Harjoitustyö (TKO_2023)

GRAAFISEN KÄYTTÖLIITTYMÄN OHJELMOINTI JAVA SWING

Harjoitus 3: Flash-komponenttiarkkitehtuuri ( )

11. Javan valintarakenteet 11.1

9. Periytyminen Javassa 9.1

Ohjelmoinnin jatkokurssi, kurssikoe

Luokka Murtoluku uudelleen. Kirjoitetaan luokka Murtoluku uudelleen niin, että murtolukujen sieventäminen on mahdollista.

2. Olio-ohjelmoinista lyhyesti 2.1

Rinnakkaisohjelmointi kurssi. Opintopiiri työskentelyn raportti

Vertailulauseet. Ehtolausekkeet. Vertailulauseet. Vertailulauseet. if-lauseke. if-lauseke. Javan perusteet 2004

Sisällys. 1. Omat operaatiot. Yleistä operaatioista. Yleistä operaatioista

Rinnakkaisohjelmointi, Syksy 2006

Sisällys. 9. Periytyminen Javassa. Periytymismekanismi Java-kielessä. Periytymismekanismi Java-kielessä

Graafisen käyttöliittymän ohjelmointi Syksy 2013

on ohjelmoijan itse tekemä tietotyyppi, joka kuvaa käsitettä

1. Omat operaatiot 1.1

Periytyminen (inheritance)

Ohjelmassa henkilön etunimi ja sukunimi luetaan kahteen muuttujaan seuraavasti:

Olio-ohjelmointi Syntaksikokoelma

Tapahtumapohjainen ohjelmointi. Juha Järvensivu 2008

C++ rautaisannos. Kolme tapaa sanoa, että tulostukseen käytetään standardikirjaston iostreamosassa määriteltyä, nimiavaruuden std oliota cout:

20. Javan omat luokat 20.1

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op. Tietorakenneluokkia 2: HashMap, TreeMap

Sisällys. 20. Javan omat luokat. Java API. Pakkaukset. java\lang

Javan GUI Scratchaajalle

Harjoitus 2. Harjoitus 3

Sisällys. 9. Periytyminen Javassa. Periytymismekanismi Java-kielessä. Periytymismekanismi Java-kielessä

Toisessa viikkoharjoituksessa on tavoitteena tutustua JUnit:lla testaukseen Eclipse-ympäristössä.

Olion elinikä. Olion luominen. Olion tuhoutuminen. Olion tuhoutuminen. Kissa rontti = null; rontti = new Kissa();

Graafisen käyttöliittymän ohjelmointi Syksy 2013

4. Olio-ohjelmoinista lyhyesti 4.1

Javan GUI Scratchaajalle

RINNAKKAINEN OHJELMOINTI A,

Osio 4: Graafinen käyttöliittymä

Sisältö Yleistä. Esittely ja luominen. Alkioiden käsittely. Kaksiulotteinen taulukko. Taulukko metodin parametrina. Taulukko ja HelloWorld-ohjelma. Ta

public static void main (String [] args)

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

15. Ohjelmoinnin tekniikkaa 15.1

JReleaser Yksikkötestaus ja JUnit. Mikko Mäkelä

14. Poikkeukset 14.1

Ohjelmoinnin peruskurssien laaja oppimäärä

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2

JavaScript alkeet Esimerkkikoodeja moniste 2 ( Metropolia)

Kääreluokat (oppikirjan luku 9.4) (Wrapper-classes)

9. Periytyminen Javassa 9.1

DokuMentori Oy, valvojana insinööri (AMK) Erno Nieminen

Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä

Javan GUI Scratchaajalle

17. Javan omat luokat 17.1

Transkriptio:

Java UI-komponentit (JTable) Juha Järvensivu juha.jarvensivu@tut.fi 2007

JTable Datan esittäminen taulukkomuodossa Datan valitseminen taulukosta Datan muokkaaminen (lisääminen, muokkaaminen, poistaminen)

JTable String[] columnnames = {"First Name", "Last Name", "Sport", "# of Years, "Vegetarian"}; Object[][] data = { {"Mary", "Campione", "Snowboarding", new Integer(5), new Boolean(false)}, {"Alison", "Huml", "Rowing", new Integer(3), new Boolean(true)}, {"Kathy", "Walrath", "Knitting", new Integer(2), new Boolean(false)}, {"Sharon", "Zakhour", "Speed reading", new Integer(20), new Boolean(true)}, {"Philip", "Milne", "Pool", new Integer(10), new Boolean(false)} }; JTable table = new JTable(data, columnnames); add(table); // Add table to JPanel

JTable

Taulukon ominaisuuksia Taulukon käyttö yksinkertaista Kaikki solut saman tyyppisiä (string) Solut automaattisesti editoitavissa Sarakkeiden otsikko ei oletuksena näkyvissä

Table header public class TableDemo extends JPanel { public TableDemo() { super(new BorderLayout()); String[] columnnames = { }; Object[][] data = { }; JTable table = new JTable(data, columnnames); } add(table.gettableheader(), BorderLayout.PAGE_START); add(table, BorderLayout.CENTER); }

Table header

Vierityspalkkien lisääminen public class TableDemo extends JPanel { public TableDemo() { String[] columnnames = { }; Object[][] data = { }; JTable table = new JTable(data, columnnames); } JScrollPane spane = new JScrollPane(table); table.setpreferredscrollableviewportsize(new Dimension(500, 70)); add(spane,borderlayout.center);

Vierityspalkkien lisääminen

Sarakeleveyden muuttaminen import javax.swing.table.*;.. TableColumn column = null; for (int i = 0; i < 5; i++) { column = table.getcolumnmodel().getcolumn(i); if (i == 2) { column.setpreferredwidth(200); //sport column is bigger } else { column.setpreferredwidth(50); } }

Sarakeleveyden muuttaminen

Datan valitseminen Oletuksena alkioiden valinta toimii kuten listakomponentilla (JList) Oletuksena usean rivin valitseminen samaan aikaan mahdollista

Datan valitseminen table.setselectionmode(listselectionmodel.single_selection); //Ask to be notified of selection changes. ListSelectionModel rowsm = table.getselectionmodel(); rowsm.addlistselectionlistener(new MyListSelectionListener()); class MyListSelectionModel implements ListSelectionListener { public void valuechanged(listselectionevent e) { ListSelectionModel lsm = (ListSelectionModel)e.getSource(); if (lsm.isselectionempty()) {...//no rows are selected } else { int selectedrow = lsm.getminselectionindex();...//selectedrow is selected } } }

Taulukon ominaisuuksia Taulukon käyttö yksinkertaista Solut automaattisesti editoitavissa Kaikki solut saman tyyppisiä (string) Data joudutaan kopioimaan taulukkoon tai vektoriin Monipuolisempi toteutus? Oman Table modelin luonti

Taulukon luominen JTable() Constructs a default JTable that is initialized with a default data model, a default column model, and a default selection model. JTable(int numrows, int numcolumns) Constructs a JTable with numrows and numcolumns of empty cells using DefaultTableModel. JTable(Object[][] rowdata, Object[] columnnames) Constructs a JTable to display the values in the two dimensional array, rowdata, with column names, columnnames. JTable(TableModel dm) Constructs a JTable that is initialized with dm as the data model, a default column model, and a default selection model. JTable(TableModel dm, TableColumnModel cm) Constructs a JTable that is initialized with dm as the data model, cm as the column model, and a default selection model. JTable(TableModel dm, TableColumnModel cm, ListSelectionModel sm) Constructs a JTable that is initialized with dm as the data model, cm as the column model, and sm as the selection model. JTable(Vector rowdata, Vector columnnames) Constructs a JTable to display the values in the Vector of Vectors, rowdata, with column names, columnnames.

TableModel Model TableModel View JTable

TableModel (interface) Void addtablemodellistener(tablemodellistener l) Class getcolumnclass(int columnindex) Int getcolumncount() String getcolumnname(int columnindex) Int getrowcount() Object getvalueat(int rowindex, int columnindex) Boolean iscelleditable(int rowindex, int columnindex) Void removetablemodellistener(tablemodellistener l) Void setvalueat(object avalue, int rowindex, int columnindex) TableModel mydata = new MyTableModel(); JTable table = new JTable(myData);

AbstractTableModel Antaa oletustoteutuksen useimmille TableModel-rajapinnan funktioille Itse pitää toteuttaa ainoastaan public int getrowcount(); public int getcolumncount(); public Object getvalueat(int row, int column);

DefaultTableModel Kirjaston tarjoama oletustoteutus TableModel-rajapinnalle Käyttää vektoreita datan tallentamiseen

MyDataModel (1/2) class MyTableModel extends AbstractTableModel { private String[] columnnames = private Object[][] data =... } public int getcolumncount() { return columnnames.length; } public int getrowcount() { return data.length; } public String getcolumnname(int col) { return columnnames[col]; } public Object getvalueat(int row, int col) { return data[row][col]; } public Class getcolumnclass(int c) { return getvalueat(0, c).getclass(); }

MyDataModel (2/2) class MyTableModel extends AbstractTableModel { // Kertoo onko taulukon solu editoitavissa. public boolean iscelleditable(int row, int col) { if (col < 2) { return false; } else { return true; } } } // Tarvitaan, jos solun arvoa halutaan muuttaa. public void setvalueat(object value, int row, int col) { data[row][col] = value; // Kerrotaan taulukolle, että solun arvo muuttui firetablecellupdated(row, col); }

JTable TableModel TableModelListener JTable ListSelectionModel SelectionListener TableColumn TableColumnModel ColumnModelListener

Kuuntelijoita ListSelectionListener Tarkkailee alkioiden valintaa valuechanged(listselectionevent e); TableModelListener Tarkkailee TableModelin muutoksia tablechanged(tablemodelevent e);

Kuuntelijoita TableColumnModelListener Tarkkailee TableColumnModelin muutoksia columnadded columnmariginchanged columnmoved columnremoved CellEditorListener Kuuntelee CellEditorin muutoksia editingcanceled editingstopped

JTable TableModel TableModelListener JTable ListSelectionModel SelectionListener TableColumn TableColumnModel ColumnModelListener TableCellRenderer TableCellEditor

CellRenderer & CellEditor CellRenderer Määrittelee mitä komponenttia käytetään datan näyttämiseen CellEditor Määrittelee mitä komponenttia käytetään datan muokkaamiseen

DefaultTableCellRenderer Boolean - CheckBox Number - Right aligned label Double - Label + NumberFormat Date - Label + DateFormat ImageIcon - Centered Label Object - label

TableCellRenderer Component gettablecellrenderercomponent( JTable table, Object value, boolean isselected, boolean hasfocus, int row, int column)

DefaultCellEditor DefaultCellEditor(JCheckBox checkbox) DefaultCellEditor(JComboBox combobox DefaultCellEditor(JTextField textfield) TableColumn sportcolumn = table.getcolumnmodel().getcolumn(2); JComboBox combobox = new JComboBox(); combobox.additem("snowboarding");. combobox.additem("none"); sportcolumn.setcelleditor(new DefaultCellEditor(comboBox));

DefaultCellEditor

CellEditor (interface) Void addcelleditorlistener(celleditorlistener l) Void cancelcellediting() Object getcelleditorvalue() Boolean iscelleditable(eventobject anevent) Void removecelleditorlistener(celleditorlistener l) Boolean shouldselectcell(eventobject anevent) Boolean stopcellediting()

AbstractCellEditor implements CellEditor Abstrakti luokka, joka toteuttaa CellEditorrajapinnan

TableCellEditor (interface) extends AbstractCellEditor Component gettablecelleditorcomponent(jtable table, Object value, boolean isselected, int row, int column)

Työkaluvihjeet //Set up tool tips for the sport cells. DefaultTableCellRenderer renderer = new DefaultTableCellRenderer(); renderer.settooltiptext("click for combo box"); sportcolumn.setcellrenderer(renderer);

Shared model Kaksi tai useampi UI-komponentti voi jakaa saman datamallin (esim lista ja taulukko-komponentit voivat näyttää samaa dataa saman DataModelin kautta)

Lähteitä JTable http://java.sun.com/j2se/1.5.0/docs/api/javax/s wing/jtable.html http://java.sun.com/docs/books/tutorial/uiswin g/components/table.html