Hallo,
ich schildere zunächst mein Problem: ich habe bereits gegoogled und denke mein Problem hängt mit dem EDT zusammen. Ich habe gelesen man soll nicht GUI spezifische Arbeiten von einem extra Thread erledigen lassen. Ich glaube an diesem Punkt habe entweder Mist gebaut oder die Sache völlig falsch verstanden. Außerdem habe ich gelesen man soll nicht einfach so Komponenten erstellen über die contentPane innerhalb des Frames, sondern soll das irgendwie anders machen, das hab ich nicht ganz verstanden, vielleicht liegts auch daran.
ich poste jetzt mal den Code der für mein Problem in Frage kommt.
Hier mal das was im zoomUpdate() passiert
ich will einfach nur das Bild größer machen.
Durch ein System.out. im paintComponent meines OwnPanel würde ich sehen wenn er zeichnet. Macht er aber nicht und ich möchte gerne rausfinden was ich falsch mache, deshalb bitte ich euch Profis um Hilfe.
Danke
ich schildere zunächst mein Problem: ich habe bereits gegoogled und denke mein Problem hängt mit dem EDT zusammen. Ich habe gelesen man soll nicht GUI spezifische Arbeiten von einem extra Thread erledigen lassen. Ich glaube an diesem Punkt habe entweder Mist gebaut oder die Sache völlig falsch verstanden. Außerdem habe ich gelesen man soll nicht einfach so Komponenten erstellen über die contentPane innerhalb des Frames, sondern soll das irgendwie anders machen, das hab ich nicht ganz verstanden, vielleicht liegts auch daran.
ich poste jetzt mal den Code der für mein Problem in Frage kommt.
Java:
private void buttonZoomInActionPerformed(java.awt.event.ActionEvent evt)
{
//Hier lasse ich vom Thread die Arbeiten verrichten
new Thread(new Runnable() {
@Override
public void run() {
ownImage.increaseZoomFactor();
ownImage.zoomUpdate();
}
}).start();
//Und hier dann die GUI spezifischen Sachen - ich dachte an der Stelle übernimmt dann einfach der EDT wieder die Arbeit
//Remove
panelLeft.remove(ownPanel);
getContentPane().remove(panelLeft);
//OwnPanel mit geladenem BufferedImage erstellen
ownPanel=null;
ownPanel = new OwnPanel(ownImage.getBI());
//dem LeftPanel das OwnPanel hinzufügen
panelLeft=null;
panelLeft = new JScrollPane(ownPanel);
getContentPane().add(panelLeft, BorderLayout.WEST);
ownPanel.repaint();
//ownPanel.setImage(ownImage.getBI());
//getContentPane().repaint();
}
Hier mal das was im zoomUpdate() passiert
Java:
public void zoomUpdate()
{
//bei 16bit
if(type==1)
{
short[] data = ((DataBufferUShort) bi.getData().getDataBuffer()).getData();
byte[] bytearr = new byte[data.length];
bytearr=shortToByte(data,ug ,og );
byte [] bytearrZoomed = new byte[bytearr.length*zoomFactor];
for (int i=0; i<bytearr.length;i++)
{
bytearrZoomed[i*2]=bytearr[i];
bytearrZoomed[(i*2)+1]=bytearr[i];
}
width=width*zoomFactor;
height=height*zoomFactor;
DataBufferByte buffer = new DataBufferByte(bytearrZoomed, bytearrZoomed.length);
binew=OwnImage.create8bitBufferedImage(buffer,width,height);
}
//bei 8bit
if(type==0)
{
byte[] data = ((DataBufferByte) bi.getData().getDataBuffer()).getData();
DataBufferByte buffer = new DataBufferByte(data, data.length);
binew=OwnImage.create8bitBufferedImage(buffer,width,height);
}
}
ich will einfach nur das Bild größer machen.
Durch ein System.out. im paintComponent meines OwnPanel würde ich sehen wenn er zeichnet. Macht er aber nicht und ich möchte gerne rausfinden was ich falsch mache, deshalb bitte ich euch Profis um Hilfe.
Danke