2017-06-05 3 views
-1

In meinem Code übertrage ich den JPanel (Bestellpanel) von frame auf frame1. Danach, jedes Mal, wenn ich die frame1 Scrollbar verwende, repaints frame1 und meine JPanel (Bestellpanel) ist weg. Das bedeutet, ich brauche einen Weg, um meine JPanel Übermalung zu stoppen. Ich habe etwas über super.paint(); und andere Methoden gelesen, aber ich habe große Probleme, sie zu verstehen.JPanels verschwinden beim Scrollen

Hier ist ein Codebeispiel meines Problems:

import java.awt.Color; 
import javax.swing.JPanel; 
import java.awt.Container; 
import java.awt.Dimension; 
import java.awt.Insets; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JScrollPane; 
import javax.swing.ScrollPaneConstants; 


public class weqe { 


private static JFrame frame = new JFrame("First Frame"); 
private static JFrame frame1 = new JFrame("Second Frame"); 
private static JPanel Bestellpanel = new JPanel(); 

private static int kunde = 1; 


public static void addComponentsToPane(final Container pane) { 

    pane.setLayout(null); 
    final Insets insets1 = pane.getInsets();  
    // Mitn Button 

    JButton MitnIcon = new JButton("Mitnehmen"); 
      MitnIcon.setFocusPainted(false); 
      MitnIcon.setVisible(true); 

    Dimension size2 = MitnIcon.getPreferredSize(); 
      MitnIcon.setBounds(1010 + insets1.left, 700 + insets1.top, 
        size2.width + 27, size2.height + 50); 

    pane.add(MitnIcon); 

    MitnIcon.addActionListener(new ActionListener(){ 

    public void actionPerformed(ActionEvent e) { 

      if (kunde == 1) { 

       frame.getContentPane().remove(Bestellpanel); 
       Bestellpanel.setLocation(0, 0); 
       frame1.getContentPane().add(Bestellpanel); 
       Bestellpanel.repaint(); 
       frame.repaint(); 


        } 

     }}); 

    // ScrollPane   

    JPanel panel1 = new JPanel(); 
    panel1.setPreferredSize(new Dimension(2000,800)); 
    panel1.setVisible(false);  


    JScrollPane scrollPane = new JScrollPane (panel1, 
       ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, 
       ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS); 
    frame1.add(scrollPane); 

    Bestellpanel.setBounds(930 + insets1.left, 50 + insets1.top,size2.width 
    + 30, size2.height + 400);  

    Bestellpanel.setVisible(true);pane.add(Bestellpanel); 
    Bestellpanel.setBackground(Color.green);  

     } 

    private static void createAndShowGUI() { 

     //Create and set up the window. 

     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  

     frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
     addComponentsToPane(frame.getContentPane()); 



     //Size and display the window. 
     Insets insets = frame.getInsets(); 
     Insets insets1 = frame1.getInsets(); 
     frame.setSize(1200 + insets.left + insets.right, 
         900 + insets.top + insets.bottom); 
     frame.setVisible(true); 
     frame1.setSize(800 + insets1.left + insets1.right, 
       600 + insets1.top + insets1.bottom); 
     frame1.setVisible(true); 

     frame.add(Bestellpanel); 


    } 


    public static void main(String[] args) { 

    javax.swing.SwingUtilities.invokeLater(new Runnable() { 
    public void run() { 
    createAndShowGUI(); 
    } 
    }); 
    } 

    } 
+0

Vielleicht möchten Sie [den Einzug korrigieren] (https://stackoverflow.com/posts/44369357/edit), damit Ihr Code leichter zu lesen ist. – khelwood

Antwort

2
  1. meinJDialog.setSize(800,800); und panel1.setPreferredSize(new Dimension(2000,800)); höchstwahrscheinlich Teil des Problems sind, finden Sie Should I avoid the use of set(Preferred|Maximum|Minimum)Size methods in Java Swing? (Der allgemeine Konsens sagt ja und getPreferred|Maximum|MinimumSize() Methoden stattdessen außer Kraft zu setzen)

  2. Anstatt die JComponent s selbst zu entfernen/hinzufügen, versuchen Sie Card Layout

  3. Sie müssen nicht manuell Sichtbarkeit der Komponente ändern, wieder, überprüfen Sie den Link in Punkt Nummer 2, für diese Linie: Bestellpanel2.setVisible(true);

  4. Bitte folgen Sie den Java naming conventions: FirstWordUpperCaseClass, firstWordLowerCaseVariable, firstWordLowerCaseMethod() und ALL_WORDS_UPPER_CASE_CONSTANT), so, Ihr Code ist für Sie und für uns einfacher zu lesen und zu verstehen.

Wenn alle oben genannten Punkte nicht funktionieren, dann erwägen, eine Buchung gültig Minimal, Complete and Verifiable Example (MCVE) oder Short, Self Contained, Correct Example (SSCCE) die das Problem zeigt, hat keine externen Abhängigkeiten oder Anpassungen wie Hintergrundfarbe/Bild usw. Es sollte richtig eingerückt werden , wie in den Kommentaren oben gesagt.

+0

Danke für die Hilfe Frakcool. Das bedeutet, dass meine Panels verschwinden, wenn ich Scrollbar benutze, wegen der JDialog- und Panel1 Size-Konfigurationen? – Jennifer96

+0

Ich habe das nicht gesagt, ich sagte, dass sie * Teil * davon sind. Wir können den Fehler in Ihrem Code nicht sehen, weil er nicht vollständig ist. Bitte werfen Sie einen Blick auf die [mcve] Seite und schreiben Sie eine. 'Bestellpanel' Wir wissen nicht, wie diese Klasse aussieht, erstellen ein ganz neues Programm, das einfach genug ist, um Ihr Problem ohne benutzerdefinierte Klassen anzuzeigen, wenn es nicht benötigt wird, aber das ist kurz genug, um hier gepostet zu werden. Beachten Sie, dass wir nicht Ihr gesamtes Programm oder Code-Schnipsel wollen, wir wollen ein ausführbares Beispiel, das Ihr Problem zeigt. – Frakcool

+0

Ich habe schon gesehen, dass 'Bestellpanel' ein' JPanel' ist, sehen Sie? Ich bin verwirrt und deshalb müssen Sie Ihren Code richtig einrücken * UND * folgen Namenskonventionen – Frakcool

Verwandte Themen