-
.
Salve a tutti, questo pomeriggio ho parlato con eXander che mi ha consigliato di aprire un topic in questa spiegazione. Vorei avere una delucidazione sulle GUI in Java. Innanzitutto faccio una premessa, utilizzo come IDE NetBeans e, per la creazione delle GUI, uso l'apposito tool offerto dal programma. Questo perché non ho ancora molta esperienza nell'ambito delle GUI e quindi non saprei se il codice scritto sia in qualche modo "corretto". Inoltre, sono del parere che se qualcuno ha già fatto il lavoro "sporco" ed il codice è testato e funzionante, è meglio riutilizzarlo, no?
In questi giorni sto sviluppando un'applicazione, precisamente un WYSIWYG amatoriale che, alla pressione di un jButton, mi genera il codice corrispondente al rispettivo tag. Vorrei realizzare un'interfaccia grafica più carina e soprattutto che sia univoca su tutti i sistemi operativi. Il L&F Nimbus non mi piace molto e preferirei personalizzare ciascun singolo componente. Ma se per i jButton è possibile farlo utilizzando un'immagine, la stessa cosa non posso farla per un componente quale il jComboBox.
Ho letto dell'esistenza di JavaFX, però non credo sia ancora il momento di spingermi a tanto, per quanto la tentazione sia forte dal momento che prevede l'utilizzo di un foglio di stile .css per gestire la grafica.Mi chiedo quindi se sia possibile in qualche modo ottenere qualcosa di simile e personalizzato utilizzando gli Swing.. -
.
Ciao, cercherò di risponderti al meglio e di esserti d'aiuto. Salve a tutti, questo pomeriggio ho parlato con eXander che mi ha consigliato di aprire un topic in questa spiegazione. Vorei avere una delucidazione sulle GUI in Java. Innanzitutto faccio una premessa, utilizzo come IDE NetBeans e, per la creazione delle GUI, uso l'apposito tool offerto dal programma. Questo perché non ho ancora molta esperienza nell'ambito delle GUI e quindi non saprei se il codice scritto sia in qualche modo "corretto". Inoltre, sono del parere che se qualcuno ha già fatto il lavoro "sporco" ed il codice è testato e funzionante, è meglio riutilizzarlo, no?
Di certo la tua esperienza non aumenterà se ti affiderai ad un tools il cui scopo è sì velocizzare il lavoro, ma di certo non quello di apprendere i componenti che stai utilizzando. Di solito gli IDE all'inizio sono sconsigliati proprio perchè non permettono di imparare.
Ti consiglierei quindi di utilizzare il compilatore e l'interprete da riga di comando, e di studiare AWT/Swing dal tutorial ufficiale di Oracle. Quando avrai abbastanza dimestichezza allora anche l'IDE può aver senso, visto che a quel punto saprai *bene* ciò che starai facendo.In questi giorni sto sviluppando un'applicazione, precisamente un WYSIWYG amatoriale che, alla pressione di un jButton, mi genera il codice corrispondente al rispettivo tag. Vorrei realizzare un'interfaccia grafica più carina e soprattutto che sia univoca su tutti i sistemi operativi. Il L&F Nimbus non mi piace molto e preferirei personalizzare ciascun singolo componente. Ma se per i jButton è possibile farlo utilizzando un'immagine, la stessa cosa non posso farla per un componente quale il jComboBox.
Dovresti mostrare del codice; senza esso è complicato poter rispondere. Il L&F puoi cambiarlo, ne esistono un sacco (compreso quello di default del sistema). Puoi anche scaricarne dalla rete. Potrebbe interessarti il Cross Platform (Metal, è il suo nome). Qui puoi trovarne alcuni "recensiti": www.jwrapper.com/blog/6-great-look-...java-app-pretty
Ne troverai sicuramente altri in rete, come ad esempio JTatoo: www.jtattoo.net/ScreenShots.htmlHo letto dell'esistenza di JavaFX, però non credo sia ancora il momento di spingermi a tanto, per quanto la tentazione sia forte dal momento che prevede l'utilizzo di un foglio di stile .css per gestire la grafica.Mi chiedo quindi se sia possibile in qualche modo ottenere qualcosa di simile e personalizzato utilizzando gli Swing.
JavaFX lo utilizzai anni fa, quando era ancora a sè stante. Non ho esperienze pratiche con questa libreria attualmente, quindi non saprei consigliarti al meglio. La cosa certa è che è molto diverso dall'utilizzo di Swing, quindi potresti leggerti un pò le basi di AWT e poi dare un occhio a JavaFX... se non ti ispira, passi a Swing. Personalmente ho provato a rimetterci mano qualche mese fa per curiosità, ma visto il poco tempo ho abbandonato subito: è molto diversa sintatticamente rispetto a Swing. Qui trovi tutto: http://docs.oracle.com/javase/8/javase-cli...echnologies.htm. -
.
Ciao, grazie per la risposta e scusami se ti ho risposto a distanza di tanto tempo, ma stavo appunto preparando l'esame di Java XD Prima di tutto ti faccio vedere la GUI che ho realizzato (te la mostro in formato immagine). SPOILER (clicca per visualizzare)
Praticamente è come se fosse il creatore di topic per Forumfree. Nulla di particolarmente complesso alla fine, ma volevo riuscire a personalizzare ancora di più la grafica. Preferirei mantenermi su qualcosa di flat/minimal, ma ho notato che, giustamente, sugli altri computer che non usano Windows 10, si vede diversamente. Da qui il voler cambiare il L&F per renderlo uguale su tutti i sistemi operativi. Ad esempio il jComboBox è quello che differisce maggiormente, ma son davvero limitato nella personalizzazione.
Cosa mi consigli?. -
.
Hai provato a cambiare L&F? Magari Metal proprio. Dai un occhio a questa pagina: http://docs.oracle.com/javase/tutorial/uis....html#available
Dipende che problema hai con il JComboBox. E' il suo colore? Se vuoi puoi cambiarlo utilizzando setBackground().. -
.
Provo il Metal e ti faccio sapere. Se non sbaglio avevo scartato questo l&f perché c'erano le sfumature, nonostante sia l'unico che si mantenga uguale ovunque. Il background non posso cambiarlo sul l&f Windows. Rimane di colore grigio. . -
.
Il background di un componente si può cambiare. Se non vedo il codice che hai scritto però mi riesce difficile esserti d'aiuto. Provo a scriverti un esempio: CODICEimport java.awt.*;
import javax.swing.*;
import javax.swing.plaf.ColorUIResource;
class Example extends JFrame {
private JComboBox<String> comboBox;
Example() {
super("Esempio");
UIManager.put("ComboBox.background", new ColorUIResource(Color.CYAN));
UIManager.put("ComboBox.selectionBackground", new ColorUIResource(Color.CYAN));
// Pannello contenitore
JPanel panel = new JPanel();
panel.setOpaque(true);
panel.setBackground(Color.WHITE);
// Primo elemento: combobox con renderer personalizzato
comboBox = new JComboBox<String>(new String[]{"A", "B", "C"});
comboBox.setPreferredSize(new Dimension(80,30));
comboBox.setRenderer(new ComboBoxRenderer());
panel.add(comboBox);
add(panel);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void makeGUI() {
Example e = new Example();
e.setSize(300,200);
e.setVisible(true);
}
public static void main(String[] args) {
try {
SwingUtilities.invokeAndWait(new Runnable() {
public void run() {
makeGUI();
}
});
} catch(Exception e) {}
}
/*
* Con un renderer personalizzato puoi anche personalizzarti tutti gli altri aspetti,
* come le posizioni del testo, i colori etc
*/
class ComboBoxRenderer extends JLabel implements ListCellRenderer<Object> {
public ComboBoxRenderer() {
setOpaque(true);
setHorizontalAlignment(CENTER);
setVerticalAlignment(CENTER);
}
public Component getListCellRendererComponent(JList<?> list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
setText(value.toString());
if (isSelected) {
setBackground(Color.WHITE);
} else {
setBackground(Color.GREEN);
}
return this;
}
}
}
. -
.
Appena torno a casa vedo di provare il codice, molto pulito e chiaro. Mi sa che hai ragione sul fatto di creare la GUI senza tool. . -
.
Quando hai news posta pure. . -
.
Sì, vedo di finirlo e poi ti chiedo delle cose postandoti il codice completo! .