Hallo,
ich habe schon oft GUI’s mit LayoutManagern, auch mit dem GridBagLayout programmiert. Diesmal allerdings klappt das nicht so wirklich wie ich will und ich brauche etwas Hilfe, um die GUI auf meine Wünsche anzupassen.
Wenn ich das Programm starte sieht meine GUI so aus:
Wenn ich dann das Fenster “resize” sieht die GUI so aus:
Ich schätze diese Änderung kommt durch weighty und weightx Angaben zustande, obwohl ich es auch nicht komplett nachvollziehen kann.
Aussehen soll es wie in Bild 2, nur das Zusammenfassung und Schauspieler beides TextAreas sind und daher auch größer sein sollen als die Textfelder oben drüber. Diese sollen eigentlich etwas kleiner werden. Mein Code für das Erstellen des JDialogs ist dieser hier;
(PlaceholderText(field)(area) ist eine eigene Klasse, die dazu benutzt wird, um den Textfelder und TextAreas placeholder mitzugeben, coverPanel ist ein JPanel der das entsprechende Image zeichnet)
private void createMovieDialog() {
dialog = new JDialog(this);
dialog.setTitle("Film eintragen...");
dialog.setSize(500, 280);
dialog.setModal(true);
dialog.setLayout(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
c.fill = GridBagConstraints.BOTH;
c.gridx = 0;
c.gridy = 0;
c.weightx = 1.0;
c.weighty = 1.0;
c.gridwidth = 2;
c.gridheight = 1;
nameField = new PlaceholderTextField("");
nameField.getDocument().addDocumentListener(new DocumentListener() {
public void changedUpdate(DocumentEvent e) {
changed();
}
public void removeUpdate(DocumentEvent e) {
changed();
}
public void insertUpdate(DocumentEvent e) {
changed();
}
public void changed() {
if (nameField.getText().equals("")) {
addButton.setEnabled(false);
} else {
addButton.setEnabled(true);
}
}
});
nameField.setPlaceholder("Filmname");
dialog.add(nameField, c);
isbnField = new PlaceholderTextField("");
isbnField.getDocument().addDocumentListener(new DocumentListener() {
public void changedUpdate(DocumentEvent e) {
changed();
}
public void removeUpdate(DocumentEvent e) {
changed();
}
public void insertUpdate(DocumentEvent e) {
changed();
}
public void changed() {
if (isbnField.getText().equals("")) {
addButton.setEnabled(false);
} else {
addButton.setEnabled(true);
}
}
});
c.gridy = 1;
isbnField.setPlaceholder("ISBN");
dialog.add(isbnField, c);
yearField = new PlaceholderTextField();
yearField.setPlaceholder("Jahr...");
c.gridy = 2;
dialog.add(yearField,c);
producerField = new PlaceholderTextField();
producerField.setPlaceholder("Produzent...");
c.gridy = 3;
dialog.add(producerField,c);
actorsArea = new PlaceholderTextArea();
actorsArea.setPlaceholder("Schauspieler");
actorsArea.setLineWrap(true);
actorsArea.setWrapStyleWord(true);
actorsArea.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_TAB) {
e.consume();
KeyboardFocusManager.getCurrentKeyboardFocusManager()
.focusNextComponent();
}
if (e.getKeyCode() == KeyEvent.VK_TAB && e.isShiftDown()) {
e.consume();
KeyboardFocusManager.getCurrentKeyboardFocusManager()
.focusPreviousComponent();
}
}
});
JScrollPane actorScrollPane = new JScrollPane(actorsArea);
c.weighty = 1.0;
c.gridy = 4;
c.gridheight = 2;
dialog.add(actorScrollPane, c);
summaryArea = new PlaceholderTextArea();
summaryArea.setPlaceholder("Zusammenfassung");
summaryArea.setLineWrap(true);
summaryArea.setWrapStyleWord(true);
summaryArea.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_TAB) {
e.consume();
KeyboardFocusManager.getCurrentKeyboardFocusManager()
.focusNextComponent();
}
if (e.getKeyCode() == KeyEvent.VK_TAB && e.isShiftDown()) {
e.consume();
KeyboardFocusManager.getCurrentKeyboardFocusManager()
.focusPreviousComponent();
}
}
});
JScrollPane summaryScrollPane = new JScrollPane(summaryArea);
c.gridy = 6;
dialog.add(summaryScrollPane, c);
addButton = new JButton("Hinzufügen...");
addButton.setEnabled(false);
addButton.addActionListener(this);
addButton.setActionCommand("addButton");
c.gridy = 8;
c.gridheight = 1;
c.weighty = 0.0;
dialog.add(addButton, c);
scanButton = new JButton("Suchen...");
scanButton.addActionListener(this);
scanButton.setActionCommand("scanButton");
c.gridx = 2;
dialog.add(scanButton, c);
coverPanel = new CoverPanel(null);
coverPanel.setBorder(new EtchedBorder(EtchedBorder.LOWERED,
Color.black, Color.black));
coverPanel.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
imgChooser = new JFileChooser();
String[] suffices = ImageIO.getReaderFileSuffixes();
for (int i = 0; i < suffices.length; i++) {
FileFilter filter = new FileNameExtensionFilter(suffices**
+ " files", suffices**);
imgChooser.addChoosableFileFilter((FileFilter) filter);
}
imgChooser.setFileFilter(imgChooser.getChoosableFileFilters()[0]);
imgChooser.showOpenDialog(tablePanel);
File file = imgChooser.getSelectedFile();
if(file != null) {
String extension = "";
int i = file.getPath().lastIndexOf('.');
if (i > 0) {
extension = file.getPath().substring(i + 1);
}
try {
image = ImageIO.read(file);
coverPanel.setImage(image);
coverPanel.setExtensionForImage(extension);
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
});
c.gridy = 0;
c.weighty = 1;
c.weightx = 0;
c.gridheight = 3;
c.gridwidth = 1;
dialog.add(coverPanel, c);
seenBox = new JCheckBox("Gesehen");
c.weighty = 0;
c.weightx = 1;
c.gridy = 3;
c.gridheight = 1;
c.gridwidth = 1;
dialog.add(seenBox, c);
boughtBox = new JCheckBox("Gekauft");
c.gridy = 4;
dialog.add(boughtBox, c);
starRater = new StarRater(5, 1, 1);
rating = 1;
starRater.addStarListener(new StarRater.StarListener() {
public void handleSelection(int selection) {
rating = selection;
}
});
c.gridy = 5;
dialog.add(starRater, c);
dialog.setLocationRelativeTo(this);
dialog.setVisible(true);
}