Kuvamatriisi -
java
Tässä on demokoodi kuvamatriisin esittämiseksi. Koodi on kirjoitettu
Eclipsessä.
import
org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.MenuItem;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.layout.FormLayout;
import org.eclipse.swt.layout.RowData;
import org.eclipse.swt.layout.RowLayout;
import org.eclipse.swt.widgets.Composite;
import java.util.ArrayList;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FormData;
import org.eclipse.swt.layout.FormAttachment;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.custom.ScrolledComposite;
import org.eclipse.swt.events.ControlAdapter;
import org.eclipse.swt.events.ControlEvent;
import org.eclipse.swt.events.MouseAdapter;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.ImageData;
// Kuva ja teksti ovat Groupin sisällä, ja Groupit ovat
Rowlayout:ssä
//--------------------------------
// 10.5.2020
public class Kuvamatr
{
private Display display;
private Composite c1;
private ScrolledComposite sc;
private ArrayList<Image>
kuvat; // tähän kerätään esillä olevat kuvat
private boolean valmis = false;
private boolean macissa;
private Shell shell;
// ---------------------------------
// 4.5.2020 KM99
public static void main(String[] args)
{
try
{
Kuvamatr
window = new Kuvamatr();
window.open();
}
catch (Exception e)
{
e.printStackTrace();
}
}
// ---------------------------------
// 10.5.2020 KM98
public void open()
{
macissa =
mikaKone().contentEquals("MAC");
display =
Display.getDefault();
createContents();
shell.open();
shell.layout();
aloitusHommia();
while (!shell.isDisposed())
{
if
(!display.readAndDispatch())
{
display.sleep();
}
}
for (Image ima :
kuvat) // vapautetaan kuvien valtaama tila
ima.dispose();
}
//
---------------------------------------------
// 9.3.2020 KM04
// Tehdään skaalattu kuva
// Huom! Muista lopuksi poistaa käytetty kuva
private Image skaalattuKuva(Display display,
ImageData alku, int maxW, int maxH)
{
if (alku == null)
return
null;
int uusiH = maxH;
int uusiW = (alku.width *
uusiH) / alku.height;
if (uusiW > maxW)
{
uusiW =
maxW;
uusiH =
(alku.height * uusiW) / alku.width;
}
Image uusIma = new
Image(display, uusiW, uusiH);
GC gc = new GC(uusIma);
Image vanIma = new
Image(display, alku);
gc.drawImage(vanIma, 0, 0,
alku.width, alku.height, 0, 0, uusiW, uusiH);
vanIma.dispose();
gc.dispose();
return uusIma;
}
//
----------------------------------------------------
// 9.3.2020 KM33
// Missä koneessa olemme: MAC, WIN10, WIN8
// String mikaz = Meka.mikaKone(); // MAC,
WIN10, WIN8
private String mikaKone()
{
String osz =
System.getProperty("os.name").toLowerCase();
if (osz.indexOf("mac") !=
-1)
return
"MAC";
if (osz.indexOf("windows
10") != -1)
return
"WIN10";
return "WIN8";
}
// --------------------------------
// 10.5.2020 KM01
private void aloitusHommia()
{
String patz = (macissa) ?
"/Volumes/DATALEVY/KUVAT/Koekuvat/" : "E:/KUVAT/Koekuvat/";
kuvat = new
ArrayList<Image>(); // tähän kerätään esillä olevat
kuvat
Label lblKuva;
Label lblNimi;
RowLayout rowlay = new
RowLayout();
rowlay.type = SWT.VERTICAL;
Group group;
for (int i=0; i<10; i++)
{
ImageData
imgData = new ImageData(patz + "kuva" + i + ".jpg");
Image
image = skaalattuKuva(display, imgData, 142, 138);
kuvat.add(image);
group =
new Group(c1, SWT.NONE);
group.setText("");
group.setLayout(null);
group.setLayoutData(new RowData(144, 160));
lblKuva =
new Label(group, SWT.NONE);
int lev =
image.getBounds().width;
int kork
= image.getBounds().height;
lblKuva.setImage(image);
if
(macissa)
lblKuva.setBounds((144-lev)/2 + 3, 138-kork+4,
lev, kork); // Mac
else
lblKuva.setBounds((144-lev)/2 + 3, 138-kork+10,
lev, kork); // Windows
lblKuva.setData("idkoh", i);
lblKuva.addMouseListener(new MouseAdapter()
{
@Override
public void mouseDoubleClick(MouseEvent e)
{
Label x = (Label)
e.getSource();
int idkoh = (int)
x.getData("idkoh");
System.out.println("kuvaa "
+ idkoh + " kaksoisklikattu");
}
});
teeMenu(lblKuva);
lblNimi =
new Label(group, SWT.NONE);
lblNimi.setText("kuva" + i + ".jpg");
if
(macissa)
lblNimi.setBounds(2,152,142,20); // Mac
else
lblNimi.setBounds(2,156,142,20);
// Windows
}
sc.setMinSize(445,
scrollKorkea()); // width, height
valmis = true;
}
// --------------------------------------------
// 9.5.2020 KM09
// lasketaan skrollattavan alueen korkeus
private int scrollKorkea()
{
int w =
shell.getBounds().width;
int iklev = (macissa) ? 167
: 149; // yhden ruudun leveys
int ikkor = (macissa) ? 189
: 168; // yhden ruudun korkeus
int kuvriv = w /
iklev; //
kuvia rivillä
int riveja = 10 /
kuvriv; // näin monta kokonaista riviä
int vajaa = 10 - kuvriv *
riveja; // vajaalla rivillä näin monta kuvaa
if (vajaa > 0)
riveja++;
int kokokork = Math.max(540,
riveja * ikkor); // pystysuunnassa kuvat vievät tilaa
return kokokork;
}
// -------------------------------------
// 6.5.2020 KM03
// tehdään kuvalle context menu
private void teeMenu(Label ab)
{
Menu menu = new Menu(ab);
MenuItem item = new
MenuItem(menu, SWT.PUSH);
item.setText("Näytä kuva");
item.addSelectionListener(new SelectionAdapter()
{
@Override
public void widgetSelected(SelectionEvent e)
{
System.out.println("Näytä
kuva idKoh="+ab.getData("idkoh"));
}
});
item = new MenuItem(menu,
SWT.PUSH);
item.setText("Kasvin
tiedot");
item.addSelectionListener(new SelectionAdapter()
{
@Override
public void widgetSelected(SelectionEvent e)
{
System.out.println("Kasvin
tiedot anna kohteelle idKoh="+ab.getData("idkoh"));
}
});
item = new MenuItem(menu,
SWT.PUSH);
item.setText("Kopioi kuva
työpöydälle");
item.addSelectionListener(new SelectionAdapter()
{
@Override
public void widgetSelected(SelectionEvent e)
{
System.out.println("Kopioi
kuva työpöydälle idKoh="+ab.getData("idkoh"));
}
});
ab.setMenu(menu);
}
// --------------------------------
// 9.5.2020 KM97
protected void createContents()
{
shell = new Shell();
shell.addControlListener(new
ControlAdapter()
{
@Override
public
void controlResized(ControlEvent e)
{
if (!valmis)
return;
sc.setMinSize(445, scrollKorkea()); //
width, height
}
});
if (macissa)
shell.setSize(840, 540);
else
shell.setSize(790, 540);
shell.setText("SWT
Application");
shell.setLayout(new
FormLayout());
Composite composite = new
Composite(shell, SWT.NONE);
FormData fd_composite = new
FormData();
fd_composite.bottom = new
FormAttachment(0, 29);
fd_composite.right = new
FormAttachment(100, 0);
fd_composite.top = new
FormAttachment(0);
fd_composite.left = new
FormAttachment(0);
composite.setLayoutData(fd_composite);
Label lblNewLabel = new
Label(composite, SWT.NONE);
lblNewLabel.setBounds(140,
8, 340, 14);
lblNewLabel.setText("Kuvilla
context menu");
Button btnPoistu = new
Button(composite, SWT.NONE);
btnPoistu.addSelectionListener(new SelectionAdapter()
{
@Override
public
void widgetSelected(SelectionEvent e)
{
shell.close();
}
});
btnPoistu.setBounds(10, 2,
94, 25);
btnPoistu.setText("Poistu");
sc = new
ScrolledComposite(shell, SWT.BORDER | SWT.V_SCROLL);
FormData fd_sc = new
FormData();
fd_sc.top = new
FormAttachment(composite, 0, SWT.BOTTOM);
fd_sc.bottom = new
FormAttachment(100, -2);
fd_sc.right = new
FormAttachment(composite, 0, SWT.RIGHT);
fd_sc.left = new
FormAttachment(0);
sc.setLayoutData(fd_sc);
c1 = new Composite(sc,
SWT.NONE);
RowLayout rowLayout = new
RowLayout(SWT.HORIZONTAL);
rowLayout.spacing = 3;
c1.setLayout(rowLayout);
sc.setContent(c1);
sc.setExpandHorizontal(true);
sc.setExpandVertical(true);
}
}
-----------------------------------
(sivua muokattu 10.5.2020)