Ciao a tutti.
Sto creando una interfaccia grafica.
Al momento ho 3 macro oggetti che il mio frame deve contenere.
Incollo il codice e poi vi spiego:
Codice PHP:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.text.*;
public class ChatUI {
public static void main (String [] args)
{
EventQueue.invokeLater (new Runnable()
{
public void run(){
start();
}
});
}
public static void start()
{
final JTextPane textPane = new JTextPane();
final JTextField chatArea = new JTextField(20);
GridBagLayout layout = new GridBagLayout();
GridBagConstraints lim = new GridBagConstraints();
JScrollPane areaScroller = new JScrollPane(textPane);
areaScroller.setPreferredSize (new Dimension(400,400));
JButton button = new JButton(new AbstractAction("Colore") {
@Override public void actionPerformed(ActionEvent e) {
AttributeSet currentAtt = textPane.getCharacterAttributes();
Color color = StyleConstants.getForeground(currentAtt);
color = JColorChooser.showDialog(textPane, "Colore", color);
if(color != null) {
SimpleAttributeSet att = new SimpleAttributeSet();
StyleConstants.setForeground(att, color);
textPane.setCharacterAttributes(att, true);
textPane.requestFocusInWindow();
}
}
});
lim.gridx = 0;
lim.gridy = 0;
lim.gridwidth = 2;
lim.gridheight=1;
layout.setConstraints(areaScroller, lim);
final ImageIcon immagine = new ImageIcon("images/green.jpg");
JComponent background = new JPanel() {
@Override
protected void paintComponent(Graphics g) {
g.drawImage(immagine.getImage(), 0, 0, getWidth(), getHeight(), null);
}
};
background.setPreferredSize(new Dimension(400, 400));
JPanel foreground = new JPanel();
foreground.setLayout(layout);
foreground.setOpaque(false);
// foreground.setAlignmentX(Component.LEFT_ALIGNMENT);
JPanel buttonContainer = new JPanel ();
lim.gridx = 0;
lim.gridy = 1;
lim.gridwidth = 1;
lim.gridheight=1;
layout.setConstraints(buttonContainer, lim);
buttonContainer.add(button);
lim.gridx = 1;
lim.gridy = 1;
lim.gridwidth = 1;
lim.gridheight=1;
layout.setConstraints(chatArea, lim);
JPanel contenitore = new JPanel();
//contenitore.setLayout(layout);
foreground.add(areaScroller);
foreground.add(buttonContainer);
foreground.add(chatArea);
contenitore.add(foreground);
contenitore.add(background);
JFrame window = new JFrame("ChatUI");
window.add(contenitore);
window.setDefaultCloseOperation (JFrame.DISPOSE_ON_CLOSE);
window.pack();
window.setVisible(true);
}
}
I miei 3 macro componenti sono: areaScroller, textField e il buttonContainer.
Ora , vorrei ordinarli con il gridBagLayout e ho formato una griglia immaginaria.
Questa griglia e' (come si vede dalle costanti di gridBagLayout) un quadrato, diviso in 4: la prima riga, deve essere occupata da areaScroller (che occupa i 2 quadratini della prima riga).
Gli ultimi due quadratini in basso son occupati da textField e dal buttonContainer.
Ora, mi sapere dire dove sbaglio?
Perche' invece che sovrappormi i miei elementi, mette foreground e contenitore separati.
In pratica uso un "master" contenitore.
Questo contenitore a sua volta contiene il JPanel background, che contiene l'immagine di fondo.
Foreground invece contiene tutti i miei componenti della UI, quindi io ho applicato al foreground il mio ordinamento.
Pero' devo aver sbagliato qualcosa li...
Help!