- wie Hidding von Komponenten in diesem Code lösen
- Code ohne Fehler läuft
- aber Hintergrundbild nicht
- angezeigt, wie man Code ändern das Hintergrundbild zu erhalten
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(); } }
Antwort
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:
Und die Ausgabe von Ihrem Code w gegeben ith der Linie I hinzugefügt ist:
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.
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
@Frakcool konnte es das Problem des Hintergrundbildes, das die anderen Komponenten versteckt –