[Java] JButtons in JDialog klickbar machen

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von unix, 11. Mai 2011 .

Schlagworte:
Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. 11. Mai 2011
    Zuletzt von einem Moderator bearbeitet: 14. April 2017
    JButtons in JDialog klickbar machen

    Huhu,

    ich hab mal wieder ein kleines Problem ^^

    Und zwar hab ich ein JDialog, in dem einfach 4 Buttons für eine Auswahl zu finden sind.
    Es wird einfach ausgegeben welcher Button geklickt wurde (mehr kommt später).

    Hier ist mal mein aktueller Ansatz:

    Code:
     Object[] possibilities = { " 1 ", " 2 ", " 3 ", " 4 "};
     int n = JOptionPane.showOptionDialog(mainFrame,
     "Welchen Schacht aktivieren?",
     "Schacht aktivieren",
     JOptionPane.YES_NO_CANCEL_OPTION,
     JOptionPane.QUESTION_MESSAGE, null,
     possibilities, null) + 1;
     
     System.out.println("Schacht " + n +" wurde geklickt");
    
    Bild

    So, dies funzt wunderbar und hat bis jetzt auch alles erfüllen können was ich brauchte. Man klickt nen Button, der JDialog schließt sich und zeigt an welcher geklickt wurde!

    Jetzt will ich aber nach einigen Kriterien, ein oder mehrere Buttons ausgrauen und nicht anklickbar machen.
    Bsp:
    Bild

    Das hab ich jetzt so realisiert:

    Code:
     JButton bt1 = new JButton(" 1 ");
     bt1.addActionListener(new java.awt.event.ActionListener() {
     public void actionPerformed(java.awt.event.ActionEvent e) {
     //TODO
     }});
     JButton bt2 = new JButton(" 2 ");
     bt2.addActionListener(new java.awt.event.ActionListener() {
     public void actionPerformed(java.awt.event.ActionEvent e) {
     //TODO
     }});
     JButton bt3 = new JButton(" 3 ");
     bt3.addActionListener(new java.awt.event.ActionListener() {
     public void actionPerformed(java.awt.event.ActionEvent e) {
     //TODO
     }});
     bt3.setEnabled(false);
     JButton bt4 = new JButton(" 4 ");
     bt4.addActionListener(new java.awt.event.ActionListener() {
     public void actionPerformed(java.awt.event.ActionEvent e) {
     //TODO
     }});
     
     Object[] possibilities = {bt1, bt2, bt3, bt4};
     int n = JOptionPane.showOptionDialog(mainFrame,
     "Welchen Schacht aktivieren?",
     "Schacht aktivieren",
     JOptionPane.YES_NO_CANCEL_OPTION,
     JOptionPane.QUESTION_MESSAGE, null,
     possibilities, null) + 1;
     
     System.out.println("Schacht " + n +" wurde geklickt");
    
    Hier hab ich nur allerdings das Problem, dass die Buttons auf keine Klicks reagieren.

    Ich weiß auch, dass die nen ActionListener benötigen, nur was soll ich da reinschreiben?

    das ClickEvent hat keinen Rückgabewert (void), also wie kann ich es jetzt so festlegen, dass der Code normal funzt mit den JButton Objekten anstatt den String Objekten im JDialog?

    Vielen Dank

    MfG
     
  2. 11. Mai 2011
    AW: JButtons in JDialog klickbar machen

    Nun, das ganze ist ein bisschen komplizierter. Zwar könntest du durch den ActionListener sofort auswerten, welcher Button geklickt wurde, doch es gibt so keine Möglichkeit das Dialogfenster zu schließen, weil du ja keine Referenz darauf besitzt.

    Daher musst du einen eigenen JDialog erstellen. Das JOptionPane kannst du aber weiterhin nutzen, um die Auswahl zu erstellen. Ich hab dir mal was zusammengeschrieben, du mussts dir noch ein bisschen anpassen und einige Schönheitsfehler berichtigen

    Code:
     final JDialog dialog = new JDialog();
     dialog.setTitle("Schacht aktivieren");
     
     final JButton bt1 = new JButton(" 1 ");
     bt1.addActionListener(new java.awt.event.ActionListener() {
     public void actionPerformed(java.awt.event.ActionEvent e) {
     System.out.println("Schacht 1 wurde geklickt");
     dialog.setVisible(false);
     }});
     final JButton bt2 = new JButton(" 2 ");
     bt2.addActionListener(new java.awt.event.ActionListener() {
     public void actionPerformed(java.awt.event.ActionEvent e) {
     System.out.println("Schacht 2 wurde geklickt");
     dialog.setVisible(false);
     }});
     final JButton bt3 = new JButton(" 3 ");
     bt3.addActionListener(new java.awt.event.ActionListener() {
     public void actionPerformed(java.awt.event.ActionEvent e) {
     System.out.println("Schacht 3 wurde geklickt");
     dialog.setVisible(false);
     }});
     bt3.setEnabled(false);
     final JButton bt4 = new JButton(" 4 ");
     bt4.addActionListener(new java.awt.event.ActionListener() {
     public void actionPerformed(java.awt.event.ActionEvent e) {
     System.out.println("Schacht 4 wurde geklickt");
     dialog.setVisible(false);
     }});
     
     Object[] possibilities = {bt1, bt2, bt3, bt4};
     
     JOptionPane opt = new JOptionPane("Welchen Schacht aktivieren?",
     JOptionPane.QUESTION_MESSAGE, 
     JOptionPane.YES_NO_CANCEL_OPTION,
     null, possibilities);
     dialog.add(opt);
     dialog.setSize(300, 140);
     
     dialog.setModal(true);
     dialog.setVisible(true);
     
     System.out.println("Ende");
    
     
  3. 11. Mai 2011
    AW: JButtons in JDialog klickbar machen

    Und so einfach wars ^^

    Vielen Dank

    MfG
     
  4. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.