2016-06-09 24 views
-2
  1. wie Hidding von Komponenten in diesem Code lösen
  2. Code ohne Fehler läuft
  3. aber Hintergrundbild nicht
  4. angezeigt, wie man Code ändern das Hintergrundbild zu erhalten
  5. wenn Validierungsverfahren verwendet wird, dessen Erstellung Fehler bei der Validierung()Hintergrundbild hidding die anderen Komponenten wie Schaltflächen Etiketten und anderen, und vicce kehrt

    public class TEST{ 
        public TEST() { 
         String[] strm = {"Jan", "Feb", "Mar", "Apr", "May"}; 
         String[] stry = {"2016", "2017", "2018","2019"}; 
         String[] strf={"NEW Delhi", "Bangalore", "Chennai"}; 
         String[] strt={"Goa","Kashmir","Hyderabad"}; 
         JFrame f = new JFrame("test"); 
         f.setSize(500, 500); 
         f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
         JLabel lfr = new JLabel("FROM"); 
         JLabel lto = new JLabel("TO"); 
         JLabel lda = new JLabel("DATE"); 
         JLabel ld = new JLabel("DAY"); 
         JLabel lm = new JLabel("MONTH"); 
         JLabel y = new JLabel("YEAR"); 
         JComboBox cfr = new JComboBox(strf); 
         JComboBox cto = new JComboBox(strt); 
         JComboBox cd = new JComboBox(); 
         JComboBox cm = new JComboBox(strm); 
         JComboBox cy = new JComboBox(stry); 
         JButton bs = new JButton("Search"); 
         JPanel p1 = new JPanel(null); 
         p1.setPreferredSize(new Dimension(500,500)); 
         JLabel jimage = new JLabel(); 
         jimage.setIcon(new ImageIcon("air.jpg")); 
    
    
         for(int i = 1; i <= 31; i++) 
          cd.addItem(i); 
         lfr.setBounds(20, 40, 100, 20); 
         cfr.setBounds(100, 40, 100, 20); 
         lto.setBounds(20, 100, 25, 20); 
         cto.setBounds(100, 100, 100, 20); 
         lda.setBounds(20, 160, 50, 20); 
         cd.setBounds(100, 160, 50, 20); 
         cm.setBounds(160, 160, 65, 20); 
         cy.setBounds(240, 160, 75, 20); 
         ld.setBounds(100, 190, 50, 20); 
         lm.setBounds(160, 190, 50, 20); 
         y.setBounds(240, 190, 50, 20); 
         bs.setBounds(20, 230, 100, 20); 
         p1.add(lfr); 
         p1.add(cfr); 
         p1.add(lto); 
         p1.add(cto); 
         p1.add(lda); 
         p1.add(cd); 
         p1.add(cm); 
         p1.add(cy); 
         p1.add(ld); 
         p1.add(lm); 
         p1.add(y); 
         p1.add(bs); 
         p1.add(jimage); 
         // validate(); 
    
         f.add(p1); 
    
         f.setVisible(true); 
        } 
    
        public static void main(String[] args) { 
         new TEST(); 
        } 
    
    } 
    
+1

Verwenden Sie kein NULL-Layout !!! Es gibt Ihnen viele Probleme! Siehe [Warum ist es verpönt, ein Null-Layout zu verwenden] (http://stackoverflow.com/questions/6592468/why-is-is-it-frowned-upon-to-use-a-null-layout-in-swing) und [Null Layout is Evil] (http://www.leepoint.net/GUI/layouts/nulllayout.html) um zu sehen, warum. – Frakcool

+0

@Frakcool konnte es das Problem des Hintergrundbildes, das die anderen Komponenten versteckt –

Antwort

1

Das Beste, was Sie tun können, ist so etwas wie:

import java.awt.FlowLayout; 
import java.awt.GridLayout; 

import javax.swing.BoxLayout; 
import javax.swing.ImageIcon; 
import javax.swing.JButton; 
import javax.swing.JComboBox; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 

public class Test { 
    JLabel label; 
    JComboBox combo; 
    JButton button; 
    JPanel pane; 
    JFrame frame; 

    JPanel create1stRow() { 
     JPanel pane = new JPanel(); 
     pane.setLayout(new FlowLayout(FlowLayout.LEFT)); 
     pane.setOpaque(false); 
     String options[] = {"New Delhi", "Bangalore", "Chennai"}; 
     label = new JLabel("FROM"); 
     combo = new JComboBox(options); 

     pane.add(label); 
     pane.add(combo); 
     return pane; 
    } 

    JPanel create2ndRow() { 
     JPanel pane = new JPanel(); 
     pane.setLayout(new FlowLayout(FlowLayout.LEFT)); 
     pane.setOpaque(false); 
     String options[] = {"Goa", "Kashmir", "Hyderabad"}; 
     label = new JLabel("TO"); 
     combo = new JComboBox(options); 

     pane.add(label); 
     pane.add(combo); 
     return pane; 
    } 

    JPanel create3rdRow() { 
     JPanel pane = new JPanel(); 
     JPanel dataPane = new JPanel(); 
     pane.setLayout(new FlowLayout(FlowLayout.LEFT)); 
     pane.setOpaque(false); 
     dataPane.setOpaque(false); //forgot to add this line when I took the pic 
     dataPane.setLayout(new GridLayout(2, 3)); //2 rows, 3 cols, so we can have the combos with their text aligned 

     String days[] = {"1", "2", "3", "4", "5"}; //Too lazy to write 31 days 
     String months[] = {"Jan", "Feb", "Mar", "Apr", "May"}; //Too lazy to write 12 months 
     String years[] = {"2016", "2017", "2018", "2019", "2020"}; 
     label = new JLabel("DATE"); 
     combo = new JComboBox(days); 

     //We add the combos 
     dataPane.add(combo); 
     combo = new JComboBox(months); //We're reusing the object, but change the data 
     dataPane.add(combo); 
     combo = new JComboBox(years); //The same as above 
     dataPane.add(combo); 

     //Now we add the labels 
     dataPane.add(new JLabel("DAYS")); 
     dataPane.add(new JLabel("MONTHS")); 
     dataPane.add(new JLabel("YEARS")); 

     pane.add(label); 
     pane.add(dataPane); //We add the whole pane to another one 
     return pane; 
    } 

    JPanel create4thRow() { 
     JPanel pane = new JPanel(); 
     pane.setLayout(new FlowLayout(FlowLayout.LEFT)); 
     pane.setOpaque(false); 
     button = new JButton("Search"); 

     pane.add(button); 
     return pane; 
    } 

    public Test() { 
     frame = new JFrame("Test"); 
     frame.setContentPane(new JLabel(new ImageIcon("C:/Users/Frakcool/workspace/StackOverflowProjects/src/test/Air.jpg"))); 
     frame.getContentPane().setLayout(new BoxLayout(frame.getContentPane(), BoxLayout.PAGE_AXIS)); 

     pane = create1stRow(); 
     frame.add(pane); 
     pane = create2ndRow(); 
     frame.add(pane); 
     pane = create3rdRow(); 
     frame.add(pane); 
     pane = create4thRow(); 
     frame.add(pane); 

     frame.pack(); 
     //frame.setSize(500, 500); //If your image is too large use this 
     frame.setVisible(true); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    } 

    public static void main (String args[]) { 
     new Test(); 
    } 
} 

Wie Sie im obigen Code sehen können, ich bin kein null layout sondern eine Kombination aus mehreren Layout Managers mit und ich schlage vor, Sie es zu tun so in der Zukunft.

jimage.setBounds(0, 0, 500, 500); 

vor diesem:

Aber wenn Sie immer noch das hässliche null Layout verwenden möchten, können Sie diese Linie fehlten gibt

lfr.setBounds(20, 40, 100, 20); 

Die Ausgabe, die meine obigen Code ist:

enter image description here

Und die Ausgabe von Ihrem Code w gegeben ith der Linie I hinzugefügt ist:

enter image description here

Wie Sie sehen können, beide sind wirklich ähnlich, und ich konnte sie gleich getan haben, aber ich habe nicht genug Zeit, dies zu tun, aber man kann durch die Kombination von die Layout-Manager, die ich oben gepostet habe.


Hinweis: ich vergaß zu erwähnen, dieses Programm zu machen das Hintergrundbild zu zeigen, musste ich alle anderen Platten nicht deckend mit pane.setOpaque(false); so machen, sollten Sie dies nutzen, wenn Sie etwas zu zeigen, brauchen das ist hinter einem anderen Panel.