PDA

View Full Version : [Java][Grafica]Problemi di grafica


ZanTeo
20-04-2012, 16:47
Ho creato il seguente frame a cui non riesco ad applicare alcune modifiche grafiche.
1)Vorrei dare al jsp una dimensione (verticale) minima ed una massima oltre quale i suoi elementi interni non si ridimensionano ma usano lo scroll;
attualmente le sue dimensioni corrispondono alla larghezza della finestra e lo scroll orizzontale funziona
2)Vorrei settare una dimensione fissa per il pannello oppure impostare una sua dimensione minima o massima.
attualmente si adatta alla dimensione verticale del pannello
Ho fatto alcune prove ma con scarso risultato. Finestra extends JFrame, JTabella sfrutta dei metodi di JTable. I metodi che restituiscono un component usaranno tutti la classe JTabella come i metodi fornitori e fumetti.
Se servono altri dettagli chiedete pure, io continuo i miei test.
class MyFrame extends JFrame {

private static final long serialVersionUID = 1L;
private Finestra frame;
private JButton aggiungi,rimuovi,modifica,stampa;
private static JTabella jTabella;
private static JScrollPane jsp;
private static JTable jt;

public MyFrame(Finestra frame, String title, Component componente) {
super(title);
this.frame = frame;
addWindowListener(new MyWindowListener1());
// setMinimumSize(getMinimumSize());
// jt.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
// JToolBar pannello = new JToolBar();
JPanel pannello = new JPanel(new GridLayout(1,4));
// pannello.setMaximumSize(getMinimumSize());
aggiungi=new JButton("Aggiungi");
rimuovi=new JButton("Rimuovi");
modifica=new JButton("Modifica");
stampa=new JButton("Stampa");
pannello.add(aggiungi);
pannello.add(rimuovi);
pannello.add(modifica);
pannello.add(stampa);
aggiungi.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
aggiungiActionPerformed(evt);
}
});
rimuovi.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
rimuoviActionPerformed(evt);
}
});
modifica.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
modificaActionPerformed(evt);
}
});
stampa.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
stampaActionPerformed(evt);
}
});
this.getContentPane().setLayout(new BorderLayout());
this.getContentPane().add(BorderLayout.SOUTH,pannello);
this.getContentPane().add(BorderLayout.CENTER,componente);
setBounds(5, 80, 700, 500);
setVisible(true);
}

private void aggiungiActionPerformed(ActionEvent evt) {
jTabella.aggiungi(null);
}

private void modificaActionPerformed(ActionEvent evt) {
jTabella.applicaModifiche();
}

private void stampaActionPerformed(ActionEvent evt) {
jTabella.stampa();
}

private void rimuoviActionPerformed(ActionEvent evt) {
jTabella.rimuovi();
}

public static Component clienti() {
jTabella=new JTabellaFactory().creaTabella("clientii",false);
jsp=new JScrollPane(jTabella.creaJTabella());
// jsp.setBorder(BorderFactory.createLineBorder(Color.YELLOW));
return jsp;
}

public static Component ordini() {
jt=new JTable(5,5);
jsp=new JScrollPane(jt);
// jsp.setAutoscrolls(true);
return jsp;
}

public static Component fornitori() {
jTabella=new JTabellaFactory().creaTabella("fornitori",false);
jsp=new JScrollPane(jTabella.creaJTabella());
// jsp.setBorder(BorderFactory.createLineBorder(Color.YELLOW));
return jsp;
}

public static Component abbonamenti() {
jt=new JTable(100,100);
jsp=new JScrollPane(jt);
// jsp.setAutoscrolls(false);
return jsp;
}

public static Component salagiochi() {
jt=new JTable(5,5);
jsp=new JScrollPane(jt);
return jsp;
}

public static Component actionfigure() {
jTabella=new JTabellaFactory().creaTabella("actionFigure",false);
jsp=new JScrollPane(jTabella.creaJTabella());
// jsp.setBorder(BorderFactory.createLineBorder(Color.YELLOW));
return jsp;
}

public static Component fumetti() {
jTabella=new JTabellaFactory().creaTabella("fumetti",false);
jsp=new JScrollPane(jTabella.creaJTabella());
// jsp.setBorder(BorderFactory.createLineBorder(Color.YELLOW));
return jsp;
}

private class MyWindowListener1 extends WindowAdapter {
public void windowClosing(WindowEvent we) {
frame.frameChiuso();
dispose();
}
}

}

PGI-Bis
20-04-2012, 17:14
La dimensione che un componente assume dipende da cosa contiene, dai valori di minimum, maximum e preferred Size il tutto a seconda del LayoutManager del contenitore.

Ad esempio quandi dici:

this.getContentPane().setLayout(new BorderLayout());
this.getContentPane().add(BorderLayout.CENTER,componente);

stabilisci anche che "componente" sarà grande tanto quanto la finestra - meno la fettina in basso dedicata a "pannello" - a prescindere dai suoi "size.

Questo perchè la regione "CENTER" di un border layout assegna al componente una dimensione residuale (tutto lo spazio disponibile meno le porzioni necessarie alle altre quattro regioni).

Se vuoi che il contenitore tenga conto dei valori dei vari size devi cambiare il layout (o usare combinazioni diverse di contenitori layout). Ad esempio FlowLayout stabilisce che il contenuto occuperà lo spazio necessario secondo la propria dimensione preferita. GridBagLayout le considera tutte e tre (minima, massima, preferita). Due border layout (cioè un panel con un borderlayout con dentro un panel con un altro borderlayout) possono essere usati per disporre un componente in un angolo di un contenitore secondo la sua dimensione preferita. E via dicendo.

Prova ad usare un FlowLayout(FlowLayout.LEFT, 0, 0) per il contenitore destinato a contenere jsp e vedi se ti va bene.