Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Verständnisfrage Text und anschließende Bildausgabe?
Hi liebe Java Programmierer ich hätte da mal eine Frage was würdet ihr mir raten wenn ich auf einen JButton klicke soll anschließend ein ca 10 x 10 cm große Beschreibung(Text) in eine Art Rahmen angezeigt werden und bei einem weiteren Kick auf einen "Pfeil" Button wird anschließend der Text durch ein Bild ersetzt. Und jetzt zu meiner Frage in was müsste der Text und das Bild angezeigt werden?? Ich weis is bissle doof beschrieben. Im Prinzip 1 Mausklick eine Text erscheint und ein weiteren klick soll das bis jetzt angezeigte Text durch ein Bild ersetzen?? Weis jemand wie ich diesne Vorgang in Java lösen könnte??
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class Test
{
static int clicks=0;
static Icon i = new ImageIcon("pic.jpg");
public static void main(String args[]){
JFrame f = new JFrame("Fenster");
f.setSize(600,600);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setLayout(new BorderLayout());
final JLabel l = new JLabel("");
f.add(l);
JButton b = new JButton("Drück mich");
f.add(BorderLayout.LINE_START,b);
b.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
if(clicks==0){l.setText("Text"); clicks++;}
else{l.setIcon(i);}
}
});
f.setVisible(true);
}
}
Wäre das möglich das ich eine Textarea verwende und diese mit der DB verbinde um 1. das Bild anzuzeigen und beim 2. klick auf die Beschreibung angezeigt bekomme?
meine güte, verena! möglich ist sehr viel. der punkt ist nur, daß du nichts davon schreibst, daß der text editierbar sein soll. solange der text nur angezeigt werden soll, wäre ein JLabel das richtige, sonst musst du an der JTextArea erst mal alles mögliche ausschalten, damit sie eben nicht editierbar und nicht fokusierbar ist. selbstverständlich kannst du aber auch selbst eine component schreiben die das kann. und solange die nicht für den benutzer interaktiv sein soll, ist das noch nicht mal sonderlich schwer. könnte beispielsweise so aussehen:
Code:
class MyComponent extends JComponent {
private Image image;
private String text;
private boolean showText;
public MyComponent(Image img, String message){
image = img;
text = message;
showText = true;
}
public void showText(){
showText = true;
repaint();
}
public void showImage(){
showText = false;
repaint();
}
public void paint(Graphics g){
if( showText ){
g.drawString(text,0,0);
}
else {
g.drawImage(image,0,0,null);
}
}
// das hier benötigst du, wenn du mit LayoutManagern arbeitest
public Dimension getPreferredSize(){
// unter der vorraussetzung, daß text und bild relativ gleich groß sind
// ansonsten musst du die größe des textes berechnen.
return new Dimension(image.getWidth(null),image.getHeight(null);
}
}
aber um nun noch auf deine folgenden fragen zu antworten: die direkte verbindung einer Component mit einer Datenbank ist so im JDK nicht vorgesehen. dergleichen musst du dir selbst programmieren. denke beispielsweise mal daran, daß die datenbank dir die abfrageergebnisse in einer voreingestellten zeichencodierung liefern wird und woher soll nun java wissen, welche das ist. wenn du mit datenbanken arbeiten willst solltest du mal nach JDBC googlen, damit du erfährst wie und womit du eine verbindung deines programms zu einer datenbank herstellst. wenn du dann entsprechende packete deinem projekt hinzugefügt hast, kannst du mit deren klassen dann datenbankabfragen absetzen und die ergebnisse erhalten. anschließend musst du, entsprechend der codierung und art des ergebnisses, code schreiben, der das ergebnis auswertet und in eine für deine applikation verwertbare form bringt.
kleines beispiel: du willst ein bild laden. nehmen wir mal an, deine datenbank ist eine MySQL-datenbank und das bild ist in einem feld des typs BIGTEXT utf8-codiert gespeichert. die datenbank ist so konfiguriert, daß sie dir die ergebnisse ebenfalls in utf8 übermittelt, sozusagen also 1:1. was du benötigst wäre der MySQL-Connector, downloadbar auf der MySQL-homepage. würde ich dir jetzt den gesamten code aufschreiben würde meine post warscheinlich locker 2 bildschirme füllen, deshalb hier die kurzform:
1. datenbankverbindung herstellen
2. datenbankabfrage absetzen: "SELECT imageData FROM images WHERE ..."
3. ergebnis erhalten und verbindung zurücksetzen
4. ergegnis liegt als UTF-8-String vor
5. umwandlung des Strings in ein BufferedImage per JPEGImageDecoder oder ImageIO (ggf. vorher nach byte[] casten)
6. bild in deine anzeigende component setzen ( myLabel.setIcon(new ImageIcon(myImage)) )
saubere programmierung heißt auch, den anzeige-teil vom verarbeitungsteil zu trennen (zumindest war das die meinung einiger meiner professoren an der FH sowie ettlicher programmierer mit denen ich im laufe meines werdegangs zu tun hatte ... und natürlich ist das auch meine eigene meinung). deshalb gibt es in java auch keine Access-typischen operationen, wie beispielsweise ein Textfeld mal eben schnell auf ne tabelle zu ziehen, kurz noch herumkonfigurieren und fertig. ich kann dir nur empfehlen dir ein bis zwei klassen zu machen, die das mit der datenbankverbindung handeln, sodaß du quasi nur noch einen aufruf an eine der klassen machst (z.B. myDBBridge.loadImage(aImageID) ) welche diesen aufruf dann an die nächste weitergibt (z.B. myDB.executeQuery("SELECT image FROM images WHERE imageID=aImageID") ). letztere sollte dann das ergebnis wieder in einer allgemeinen form zurückwerfen, beispielsweise als Hashtable (keys wären die spaltennamen und values sind ArrayLists, alle gleich lang, eben entsprechend der zeilen der datenbank-antwort). so zumindest wäre mein lösungsansatz und so habe ich bereits diverse datenbank-anbindungen programmiert.
Hi danke Wayne für deine Mühe dürft ich dich noch kurz was Fragen also eignetlich hab ich es mir so vorgestellt ich mach ´ne TextArea diese verbinde ich mit einer Datenbank und wenn nich in eine Textarea den betreffendne Begriff eintippe dann wird in der Textarea 1. Bild angezeigt und mit einem weiteren klick auf einen Button wird mir eine
2. Beschreibung in der Textarea angezeigt. Und wen ndas ganze läuft will ich das als eine selbstständige Software umwandeln so das jeder PC das Porgramm installierne kann .