2017-03-14 1 views
0

Ich mache einfach eine Benutzeroberfläche und alles, was ich tun will, nachdem die Taste gedrückt wird, ist Display Dank ... Ich bin ziemlich neu, aber von dem, was ich sehe, sind keine Fehler? Ich habe versucht, das Spiel mit dem Satz sichtbar und ohne Erfolg ... Jede Hilfe ist groß dankJava zeigt keine jpanel in Jframe nach dem Drücken der Taste

import java.awt.BorderLayout; 
import java.awt.Container; 
import java.awt.GridLayout; 

import javax.swing.BorderFactory; 
import javax.swing.JButton; 
import javax.swing.JCheckBox; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.border.Border; 
import javax.swing.JTextField; 
import javax.swing.JLabel; 
import java.awt.event.ActionListener; 
import java.awt.event.ActionEvent; 
import javax.swing.JList; 





public class GuiApp1 { 
    public static void main(String args[]) { 
    String title = (args.length == 0 ? "CheckBox Sample" : args[0]); 
    JFrame frame = new JFrame(title); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    final JPanel panel = new JPanel(new GridLayout(0, 1)); 
    Border border = BorderFactory.createTitledBorder("Pizza Toppings"); 
    panel.setBorder(border); 
    JLabel label1 = new JLabel("Enter name below:"); 
    panel.add(label1); 
    JTextField field = new JTextField(20); 
    panel.add(field); 
    JCheckBox check = new JCheckBox("Car0"); 
    panel.add(check); 
    check = new JCheckBox("Car1"); 
    panel.add(check); 
    check = new JCheckBox("Car2"); 
    panel.add(check); 
    check = new JCheckBox("Car3"); 
    panel.add(check); 
    check = new JCheckBox("Car4"); 
    panel.add(check); 
    JButton button = new JButton("Submit"); 


    final JPanel listPanel = new JPanel(); 
    listPanel.setVisible(false); 
    JLabel listLbl = new JLabel("Vegetables:"); 

    listPanel.add(listLbl); 



    button.addActionListener(new ActionListener() 
    { 
     @Override 
     public void actionPerformed(ActionEvent event) 
     { 
      listPanel.setVisible(!listPanel.isVisible()); 
      panel.setVisible(!panel.isVisible()); 


     } 
    }); 
    Container contentPane = frame.getContentPane(); 
    contentPane.add(panel, BorderLayout.CENTER); 
    contentPane.add(button, BorderLayout.SOUTH); 
    frame.setSize(300, 300); 
    frame.setResizable(true); 
    frame.setVisible(true); 
    frame.setLocationRelativeTo(null); 
    } 
} 
+1

Versuchen 'frame.revalidate Aufruf();' nach Änderungen – Plirkee

+1

Erstes Problem gemacht werden, ist, dass Sie nie listPanel an alle Eltern hinzuzufügen. – FredK

+0

Und möglicherweise 'frame.repaint()' als auch – MadProgrammer

Antwort

1

Der Grund für das Gemüse-Panel nicht erscheint, ist einfach: Xou nie ist zum contentPane hinzuzufügen.

Für den Code, den Sie richtig funktionieren müssen die Paneele in der ActionListener der Schaltfläche hinzufügen/entfernen:

button.addActionListener(new ActionListener() 
{ 
    @Override 
    public void actionPerformed(ActionEvent event) 
    { 
     listPanel.setVisible(!listPanel.isVisible()); 
     panel.setVisible(!panel.isVisible()); 

     if (listPanel.isVisible()) { 
      contentPane.remove(panel); // Vegetables are visible, so remove the Cars 
      contentPane.add(listPanel, BorderLayout.CENTER); // And add the Vegetables 
     } else { 
      contentPane.remove(listPanel); // Vice versa 
      contentPane.add(panel, BorderLayout.CENTER); 
     } 
    } 
}); 

Dann müssen Sie die ActionListener unter der contentPane Erklärung bewegen, und es final machen.

Auch sollten Sie in Betracht ziehen, die verschiedenen Checkboxen ist verschiedene Variablen, so dass Sie den Zustand von ihnen lesen können. Wenn Sie nicht möchten, dass so viele Variablen hängen bleiben, können Sie sie in ein Array einfügen.

JCheckBox[] checks = new JCheckbox[5]; 
checks[0] = new JCheckBox("Car0"); 
panel.add(checks[0]); 
... 
+0

Die Layout-Verwaltung von Swing ist also träge, das einfache Entfernen/Hinzufügen von Komponenten führt nicht immer zu einer Aktualisierung der Benutzeroberfläche. In diesem Fall würde die Verwendung eines "CardLayout" ohne die Kuriositäten denselben Effekt erzielen – MadProgrammer

Verwandte Themen