View Full Version : [Java] sfondo sfumato
Ciao a tutti
vorrei avere uno sfondo sfumato, quale funzione devo utilizzare?
setBackground() mi da la possibilità di sfumare o devo utilizzare un'altra funzione?
in rete ho visto tale funzione setBackground(new Color(20, 20, 64) (i numeri li ho messi a caso) ma non funziona ugualmente.
Grazie in anticipo
Don[ITA]
18-02-2009, 11:34
Quel metodo ti imposta lo sfondo col colore che vuoi (non sfumato).
Sinceramente non credo esista un metodo gia pronto che ti permetta di sfumare lo sfondo. Potresti provare ad usare un immagine come sfondo (e quindi potrai metterci un immagine che sfuma come ti pare) oppure colorare il pannello di sfondo (meglio se ne metti uno apposito) riga per riga cambiando il colore :confused:
ok, farò come mi hai consigliato, mi creo un immagine-sfondo :)
ho un altro problema! Non riesco a visualizzare un immagine:
......
Image grafico = Toolkit.getDefaultToolkit().getImage ( "grafico.gif" );
tab.add("Tab 1",grafico);
e mi da errore all' "add()"
Multiple markers at this line
- The method add(String, Component) in the type JTabbedPane is not applicable for the arguments (String, Image)
- The method add(String, Component) in the type JTabbedPane is not applicable for the arguments (String, Image,
JButton)
come faccio caricare allora l'immagine nel tab?
banryu79
18-02-2009, 16:23
- The method add(String, Component) in the type JTabbedPane is not applicable for the arguments (String, Image)
Ti sta dicendo che hai passato un parametro di tipo errato al metodo add, che prende una String e un Component: tu invece gli passi una String (ok) e una Image che però non discende da Component quindi ovviamente non può andare bene.
come faccio caricare allora l'immagine nel tab?
Poresti usare la tua Image per creare una javax.swing.ImageIcon (http://java.sun.com/javase/6/docs/api/javax/swing/ImageIcon.html) da passare a sua volta come parametro al costruttore di una javax.swing.JLabel (http://java.sun.com/javase/6/docs/api/javax/swing/JLabel.html): quest'ultima essendo un Component può essere passata come parametro al metodo add della tua JTabbedPane.
grazie mille per tutto :D
ImageIcon img=new ImageIcon("C:\\grafico.gif");
JLabel img2 = new JLabel(img);
tab.add("Tab 1", img2 );
riporto lo script corretto per chi ne ha bisogno :)
dato che siamo in tema, per caricarne due di immagini? uno sotto l'altra.
Ovviamente non posso passare due parametri image all' add(). Devo creare un vettore? e che tipo di vettore? scusate le mille domande, ma la grafica di java la sto imparando solo ora
Don[ITA]
18-02-2009, 18:10
ti crei due label con immagini diverse, le metti in un JPanel con layout appropriato e metti il JPanel nel tuo JTabbedPane esattamente come gia fai per la label ;)
penso che in teoria dovrei fare una cosa del genere:
.............
ImageIcon img=new ImageIcon("C:\\grafico.gif");
JLabel img2 = new JLabel(img);
ImageIcon img3=new ImageIcon("C:\\grafico2.png");
JLabel img4 = new JLabel(img3);
JPanel insieme;
insieme.addLayoutComponent("figura1",img2);
insieme.addLayoutComponent("figura1",img4);
tabbedPane.addTab("Tab1", insieme);
ma mi da errore a quasta righe:
insieme.addLayoutComponent("figura1",img2);
insieme.addLayoutComponent("figura1",img4);
The method addLayoutComponent(String, JLabel) is undefined for the type JPanel
come dovrei fare? (intanto continuo a ringraziarvi della disponibilità:) )
ho continuato così
ImageIcon img=new ImageIcon("C:\\grafico.gif");
JLabel img2 = new JLabel(img);
ImageIcon img3=new ImageIcon("C:\\grafico2.png");
JLabel img4 = new JLabel(img3);
LayoutManager insieme = null;
insieme.addLayoutComponent("figura1",img2);
insieme.addLayoutComponent("figura2",img4);
JPanel insieme2= new JPanel(insieme);
JTabbedPane tabbedPane = new JTabbedPane();
tabbedPane.addTab("Temperature", insieme2);
ma purtroppo mi da errore alla variabile insieme, dicendomi che:
The local variable insieme may not have been initialized
allora ho fatto:
LayoutManager insieme=null;
non mi visualizza più errore, ma quando lo lancio la finestra è completamente vuota
A intuito ci sei quasi. Devi usare un LayoutManager ma non propriamente in quel modo. Le GUI Java sono fatte a matrioska. Infili componenti dentro a contenitori che a loro volta sono componenti e possono essere infilati in contenitori eccetera eccetera.
Il LayoutManager dice "dove" fa a finire un componente aggiunto ad un contenitore.
Ogni contenitore ha il suo LayoutManager. Per mettere un'immagine sotto ad un altra in una scheda di un JTabbedPane posso prendere un contenitore generico, JPanel, dirgli di usare un LayoutManager che mette una cosa sopra all'altra, aggiungere le due immagini e aggiungere il JPanel come scheda del JTabbedPane.
Ad esempio:
LayoutManager layMan = new GridLayout(2, 1);
JPanel contenitoreImmagini = new JPanel();
contenitoreImmagini.setLayout(layMan);
contenitoreImmagini.add(img2);
contenitoreImmagini.add(img4);
JTabbedPane tabbedPane = new JTabbedPane();
tabbedPane.addTab("temperature", contenitoreImmagini);
Quanto allo sfondo è più efficace colorare lo sfondo del pannello. Fortunatamente non occorre farlo riga per riga. Per colorare un pannello devi sovrascrivere il suo metodo
protected void paintComponent(Graphics graphics).
Esempio:
se questo è un pannello normale
JPanel panel = new JPanel();
questo è un pannello con lo sfondo sfumato da bianco (in alto) a nero (in basso)
JPane panel = new JPanel() {
protected void paintComponent(Graphics graphics) {
super.paintComponent(graphics);
Graphics2D g = (Graphics2D)graphics;
GradientPaint gradient = new GradientPaint(0, 0, Color.WHITE, 0, getHeight() - 1, Color.BLACK);
g.setPaint(gradient);
g.fillRect(0, 0, getWidth(), getHeight());
}
};
come faccio a richiamare panel nel main?
pensavo di scrivere una cosa del genere
background(panel);
ma giustamente mi da errore in quanto
public Background()Constructs a Background node with default parameters. The default values are as follows:
color : black (0,0,0)
image : null
geometry : null
image scale mode : SCALE_NONE
application bounds : null
application bounding leaf : null
come dovrei fare?
(in questi giorni sto imparando tante di quelle cose che poi nelle cose semplici mi perdo XD )
Quel Background lì sembra un javax.media.Background, di Java3D.
Comunque non è quello.
"panel" è un JPanel tale quale agli altri a parte avere lo sfondo sfumato.
Non si tratta tanto <<di richiamarlo nel main>>, locuzione un po' ambigua, quanto di usarlo come un qualsiasi altro contenitore: ci infili dentro qualcosa e poi lo aggiungi a sua volta ad una finestra.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.