Hallo Leute, ich hab in den letzten Wochen an einem etwas größeren Projekt gearbeitet und dabei auch schon viel hier rumgefragt und Threads erstellt. Anstatt bei jedem Problem einen Thread zu eröffnen, der dann nur 5 Beiträge lang ist. Werd ich hier alle möglichen Probleme zu dem Programm posten, um der Übersichtlichkeit beizutragen 
Also vorerst - wie der Threadname schon sagt - ist es ein Zeichenprogramm mit vielen Features und noch vielen kommenden Features
Im Moment hab ich es geschafft, dass ich per Strg-X ein Bild nicht nur in die Zwischenablage lege, sondern auch ihre vorherige Position "unsichtbar" mache. Damit das so aussieht wie bei Paint oder Gimp, hab ich hinter mein Zeichen-JPanel ein weiteres JPanel gelegt, auf das ich ein grau-weiß kariertes Muster male. Dieses wird beim Ausschneiden per Strg+X sogar sichtbar und alles funktioneirt in der Hinsicht gut. Bloß hab ich dann weiter mit strg-X und Strg-V rumprobiert und mir fiel auf, dass ich es nicht schaffe, ein Bild mit einer "leeren" Stelle (durch Strg-X erzeugte Stellen) nicht in die Zwischenablage legen kann, ohne dass die Stelle beim Einfügen in Paint weiß wird. Andersrum hab ich bei Paint ein Bild gemacht mit "leeren" Stellen und es bei meinem Programm eingefügt. Auch da werden die "leeren" Stellen weiß.
Hier mal meine Klasse mit der Methode, die das Bild in die Zwischenablage legt (setClipboard());
Unf auf diese Weiße lösch ich dann die vorhandene Stelle. Nebenbei des.getLocation() gibt die Position der Auswahl in meinem ZeichenPanel und getSize() folglich deren Größe wieder (in Form von Points),
Wenn ihr noch etwas nicht in meinem Quellcode nicht versteht, sagt bitte bescheid. Wäre jetzt vll. zu aufwendig zu erläutern, wie mein ganzes Programm strukturiert ist
Gruß, Thomas
Also vorerst - wie der Threadname schon sagt - ist es ein Zeichenprogramm mit vielen Features und noch vielen kommenden Features
Hier mal meine Klasse mit der Methode, die das Bild in die Zwischenablage legt (setClipboard());
Java:
public class ClipboardAdmin implements ClipboardOwner{
public static void setClipboard(BufferedImage img){
ClipboardAdmin admin = new ClipboardAdmin();
TransferableImage transImg = admin.new TransferableImage(img);
Clipboard clBo = Toolkit.getDefaultToolkit().getSystemClipboard();
clBo.setContents(transImg, admin);
}
...
...
private class TransferableImage implements Transferable {
Image img;
public TransferableImage( Image i ) {
img = i;
}
public Object getTransferData( DataFlavor flavor )
throws UnsupportedFlavorException, IOException {
if ( flavor.equals( DataFlavor.imageFlavor ) && img != null ) {
return img;
}
else {
throw new UnsupportedFlavorException( flavor );
}
}
public DataFlavor[] getTransferDataFlavors() {
DataFlavor[] flavors = new DataFlavor[ 1 ];
flavors[ 0 ] = DataFlavor.imageFlavor;
return flavors;
}
public boolean isDataFlavorSupported( DataFlavor flavor ) {
DataFlavor[] flavors = getTransferDataFlavors();
for ( int i = 0; i < flavors.length; i++ ) {
if ( flavor.equals( flavors[ i ] ) ) {
return true;
}
}
return false;
}
}
}
Unf auf diese Weiße lösch ich dann die vorhandene Stelle. Nebenbei des.getLocation() gibt die Position der Auswahl in meinem ZeichenPanel und getSize() folglich deren Größe wieder (in Form von Points),
Java:
public void delete(){
SelectionDesign des = main.centerPanel.selection;
BufferedImage oldImg = main.centerPanel.paints.getImage();
BufferedImage newImg = new BufferedImage(oldImg.getWidth(), oldImg.getHeight(), BufferedImage.TYPE_INT_ARGB);
Graphics2D g2d = newImg.createGraphics();
try{
if (des.getDrawType() == ShapeDesign.RECTANGLE){
g2d.fillRect(des.getLocation().x, des.getLocation().y, des.getSize().x, des.getSize().y);
}
else if (des.getDrawType() == ShapeDesign.ELLIPSE){
g2d.fillOval(des.getLocation().x, des.getLocation().y,
des.getSize().x, des.getSize().y);
}
g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OUT));
main.centerPanel.paints.draw(g2d);
main.centerPanel.paints.setImage(newImg);
} finally {
g2d.dispose();
}
main.centerPanel.repaint();
}
Wenn ihr noch etwas nicht in meinem Quellcode nicht versteht, sagt bitte bescheid. Wäre jetzt vll. zu aufwendig zu erläutern, wie mein ganzes Programm strukturiert ist
Gruß, Thomas
Zuletzt bearbeitet: