Array+INfoBox

Status
Nicht offen für weitere Antworten.

skipjip

Mitglied
hallo,

ich habe ein kleines Prog mit Gui geschrieben das einen Array ausgibt. Nun würde ich gerne wenn die Maus über einem Array Eintrag ist eine InfoBox ausgeben. Geht das überhaupt?

Dann hab ich noch ein zweites Problem das mein Menü immer hinter dem Array ist und ich somit nie die kompletten Menü Punkte sehe.

Danke im Vorraus

Mfg

skipjip
 

Morgyr

Aktives Mitglied
skipjip hat gesagt.:
Nun würde ich gerne wenn die Maus über einem Array Eintrag ist eine InfoBox ausgeben. Geht das überhaupt?

Meinst du einen ToolTip? java.sun.com/docs/books/tutorial/uiswing/components/tooltip.html
Mit der Klasse wäre alles getan, du musst nur den ToolTip den Einträgen hinzufügen und es wird angezeigt.

Dann hab ich noch ein zweites Problem das mein Menü immer hinter dem Array ist und ich somit nie die kompletten Menü Punkte sehe.

Verstehe ich, ehrlich gesagt, nicht richtig. Hört sich nach einem Programmierfehler an, also postet du am besten Code.
 

skipjip

Mitglied
ToolTip kann ich doch nur auf Buttons anwenden oder?
Warum zeigt mir Netbeans bei Buttons die Bilder nicht an? Das Bild befindet sich im selben Ordner wie der Code also müsste es doch so funkonieren. Aber Netbeans zeigt mir nur ein leeres Rechteck an!

Code:
JButton b = new JButton();
    b.setIcon(new ImageIcon("info.png"));
    cPanel.add(b);
Ich würde halt gerne wenn ich über z.B. Regestrieren mit der Maus drüber fahr das dann eine Info eingeblendet wird!
Code:
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;


public class Checkliste {
  JFrame frame;
  JPanel panel;
  JTextArea text;

  String[] ToDoListe = {"Regestrieren", "Mail Verfassen", "Attachment hinzufügen",
  "CC und BCC hinzufügen", "Mail senden", "als Entwurf speichern", "Ordner erstellen",
  "Mails in neuen Ordner verschieben", "löschen", "als ungelesen makieren",
  "Ordner umbenenen und löschen", "Einstellungen ändern"};

  public static void main(String[] args) {
    Checkliste check = new Checkliste();
    check.guiErstellen();
  }

  public void guiErstellen() {
    frame = new JFrame("Mybrief-Checkliste");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(800,700);
    frame.setVisible(true);
    JPanel wPanel = new JPanel();
    JPanel sPanel = new JPanel();
    JPanel cPanel = new JPanel();
    JPanel nPanel = new JPanel();
    frame.getContentPane().add(BorderLayout.WEST, wPanel);
    frame.getContentPane().add(BorderLayout.SOUTH, sPanel);
    frame.getContentPane().add(BorderLayout.CENTER, cPanel);
    frame.getContentPane().add(BorderLayout.NORTH, nPanel);
    JButton b = new JButton();
    b.setIcon(new ImageIcon("info.png"));
    cPanel.add(b);

    Box namensBox = new Box(BoxLayout.Y_AXIS);
    for(int i = 0; i < ToDoListe.length; i++){
        namensBox.add(new Label(ToDoListe[i]));
    }

    Box checkBox = new Box(BoxLayout.Y_AXIS);
    for (int i = 0; i < ToDoListe.length; i++){
        JCheckBox c = new JCheckBox();
        c.setSelected(false);
        checkBox.add(c);
    }

    text = new JTextArea(20,40);
    JScrollPane scroller = new JScrollPane(text);
    text.setLineWrap(true);
    text.setText("Bitte alle aufgefallenen Fehler und Grafik bugs hier eintragen!");
    scroller.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
    scroller.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
    cPanel.add(scroller);

    wPanel.add(BorderLayout.WEST, checkBox);
    wPanel.add(BorderLayout.WEST, namensBox);

    JMenuBar menuleiste = new JMenuBar();
    JMenu menuDatei = new JMenu("Datei");
    JMenuItem menuPunktNeu = new JMenuItem("Neu");
    JMenuItem menuPunktSpeichern = new JMenuItem("Speichern");
    menuPunktNeu.addActionListener(new MenuNeuListener());

    menuPunktSpeichern.addActionListener(new MenuSpeichernListener());
    menuDatei.add(menuPunktNeu);
    menuDatei.add(menuPunktSpeichern);
    menuleiste.add(menuDatei);
    frame.setJMenuBar(menuleiste);
  }

  public class MenuSpeichernListener implements ActionListener {
      public void actionPerformed(ActionEvent ev){
        JFileChooser dateiWahl = new JFileChooser();
        dateiWahl.showSaveDialog(frame);
        dateiSpeichern(dateiWahl.getSelectedFile());
      }
  }

  public class MenuNeuListener implements ActionListener {
      public void actionPerformed(ActionEvent ev){
        text.setText("Bitte alle aufgefallenen Fehler und Grafik bugs hier eintragen!");
        text.requestFocus();
      }
  }
  private void dateiSpeichern(File datei){
      try {
          BufferedWriter writer = new BufferedWriter(new FileWriter(datei));
          writer.write(text.getText()+ "/" + "\n");
          writer.close();
      } catch(IOException ex) {
          ex.printStackTrace();
      }
  }
}
 

Ebenius

Top Contributor
Ändere doch Zeile 43ff in Deinem Code:
Code:
    for(int i = 0; i < ToDoListe.length; i++){
        final JLabel label = new Label(ToDoListe[i]);
        label.setToolTipText("Your Tool Tip");
        namensBox.add(label); 
    }

Meintest Du sowas?
 

skipjip

Mitglied
ja sowas mein ich! Aber wie kann ich es dann machen das ich für jeden Eintrag einen anderen TooltipText festlege?
Kann man einen Abstand zwischen den einzelnen Labels festlegen? Da die einzelnen Einträge ziemlich dicht zusammen liegen!
Habt Ihr vielleicht noch ne Buch Empfehlung für mich das ich vor allem auf GUI Entwicklung konzentriert! Hab das Buch Von Kopf bis Fuß Java aber hätte gerne noch ne weiter führende Lektüre!
 

Morgyr

Aktives Mitglied
1.Du bräuchtest wieder einen Array der an genau den gleichen Indexen die jeweilige Information hat. Darüber iterierst du ganz normal mit der bestehenden for-Schleife.
Ansonsten gäbe es noch den Container Map. Mit diesem Container hast du die direkte Verknüpfung des Label-Textes und der Information.
Informationen zu Collections/Containern

2.Bei dieser Box-Klasse gibt es eine Methode createHorizontalStrut(int width). Die Methode legt einen horizontalen Abstand fest (bzw. erstellt einfach eine Componente mit der Breite, die dann für den Abstand sorgt).

3.Ich würde dir, nach meiner Erfahrung, von einem Buch für dieses Thema abraten. Ich denke, bei dem Thema ist das sinnvollste die Praxis. Die einzelnen Komponenten sind da kaum das Problem, zumindest ist die Dokumentation von Sun da sehr sinnvoll und, wie ich finde, alles-sagend. Einüben musst du dich nur in Layouts, wobei meist schon Border- und FlowLayout geschachtelt reichen.
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben