View Full Version : [JAVA] Coordinare due scroller
franksisca
30-11-2006, 16:54
come faccio a rendere due scroller coordinati???
praticamente ho due tabelle ceh devono scorrere allo stesso modo.
come faccio a rendere due scroller coordinati???
praticamente ho due tabelle ceh devono scorrere allo stesso modo.Immagino che le tabelle siano contenute ognuna dentro un JScrollPane. Usa i metodi getVerticalScrollBar() e/o getHorizontalScrollBar() (a seconda di cosa ti serve) di JScrollPane per ottenere le scrollbar e poi associ a quelle un AdjustmentListener. Quando una delle due scrollbar cambia, aggiorni l'altra.
Spero di non aver detto fesserie, perché non ho mai fatto una cosa del genere. Se è corretto, dovrebbe essere più o meno così. ;)
franksisca
30-11-2006, 17:18
Immagino che le tabelle siano contenute ognuna dentro un JScrollPane. Usa i metodi getVerticalScrollBar() e/o getHorizontalScrollBar() (a seconda di cosa ti serve) di JScrollPane per ottenere le scrollbar e poi associ a quelle un AdjustmentListener. Quando una delle due scrollbar cambia, aggiorni l'altra.
Spero di non aver detto fesserie, perché non ho mai fatto una cosa del genere. Se è corretto, dovrebbe essere più o meno così. ;)
si, sono entrambi verticali, ma non ho idea di come usare lo adjustmentListener.....avresti un esempio???
comunque, tra te e pgi-bis, potreste tenere corsi avanzati di java, ci avete mai pensato:D:D:D:D
si, sono entrambi verticali, ma non ho idea di come usare lo adjustmentListener.....avresti un esempio???Prova questo programmino. Come vedrai, le 2 scrollbar sono "agganciate" l'una all'altra.
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class ProvaFrame extends JFrame implements AdjustmentListener
{
private JScrollBar scroll1;
private JScrollBar scroll2;
public ProvaFrame ()
{
super ("Prova scrollbar");
setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
setSize (300, 300);
scroll1 = new JScrollBar ();
scroll2 = new JScrollBar ();
scroll1.addAdjustmentListener (this);
scroll2.addAdjustmentListener (this);
add (scroll1, BorderLayout.WEST);
add (scroll2, BorderLayout.EAST);
}
public static void main (String[] args)
{
SwingUtilities.invokeLater (new Runnable()
{
public void run ()
{
ProvaFrame f = new ProvaFrame ();
f.setVisible (true);
}
});
}
public void adjustmentValueChanged (AdjustmentEvent e)
{
if (e.getSource () == scroll1)
scroll2.setValue (scroll1.getValue ());
else if (e.getSource () == scroll2)
scroll1.setValue (scroll2.getValue ());
}
}
comunque, tra te e pgi-bis, potreste tenere corsi avanzati di java, ci avete mai pensato:D:D:D:DPGI-Bis sicuramente. Io ... non credo proprio.
franksisca
30-11-2006, 17:53
PGI-Bis sicuramente. Io ... non credo proprio.
anche modesti li abbiamo :D
grazie mille
PGI-Bis sicuramente.
Un vecchio proverbio cinese dice "attento a quel che desideri perchè potresti ottenerlo".
Liberticidi – stando ai giornali – ma non allocchi.
Una volta ero portatore sano di quei deliri di onnipotenza alla "io potrei trasformare anche un sasso in un programmatore Java".
Finchè i sassi non me li son trovati lì per davvero. Da sassi li ho portati a rocce, da rocce a macigni, da macigni a ghiaia e, non c'è trucco non c'è inganno, da ghiaia di nuovo a sassi.
Pertanto io mi trovo nell'invidiabile posizione di chi ha le prove obiettive che dopo quel "sicuramente" ci va un NO.
E di questi tempi avere una certezza è un lusso mica da ridere :D.
Pertanto io mi trovo nell'invidiabile posizione di chi ha le prove obiettive che dopo quel "sicuramente" ci va un NO.Comunque riguardo Java ne sai sicuramente più di me, su questo garantisco io!
[mini OT]
Un anno fa ho fatto colloqui in 2 aziende che usano esclusivamente Java. Risultato: scartato perché a detta loro non avevo le conoscenze sufficienti su Java. Ed era sicuramente vero.
In quest'ultimo anno ho cercato di acquisire, studiare, imparare, sperimentare il più possibile su Java. Perché se al prossimo colloquio succede la stessa cosa, faccio azienda.shutdownAndKillTheBoss (); :D :D :D
[/mini OT]
[mini OT][/mini OT]
Ma sai, i colloqui son sempre un terno al lotto, non solo da programmatore. Poi in Java si fa difficoltà a distinguere dove sia la conoscenza necessaria e quella richiesta. Tu vai lì bel bello, e quello ti chiede "ah, un'ultima cosa, noi lavoriamo molto con il framework jsgnicchesgnacche, l'ha mai usato?" Tu che gli dici? Mi arrendo, che gli vuoi dire :D.
Una volta un amico m'ha chiesto se conoscessi un programmatore junior (cioè parliamo di 1 anno di esperienza) che sapesse: java , j2ee, struts, jsf, swing, itext, jdbc più sql oracle e html-javascript. "Ma bene".
Ma che bene e bene, manco Gosling le sa 'ste robe :D
Che poi, stando a quanto mi dice un altro amico che si occupa di formazione, alla fine li rincoglioniscono di servlet http.
Mi chiedo sinceramente quanto ci sia da stupirsi se poi la gente grida "miracolo è arrivato ajax!". Io ho un manuale di Javascript che ha sei anni, se gli attacco sul fianco la scritta "AIAX" è la stessa cosa e la gente si strappa i capelli. Miracolo miracolo :muro:
Personalmente finisco quello che devo e poi anno nuovo vita nuova: mollo tutto e tanti saluti.
E ogni volta che sento un pirla mettersi a parlare di "liquid computing" scrivo nel blog un "ma va da via 'l cu" :D
franksisca
02-12-2006, 19:16
c'è un problema, io devo usre 2 JScrollPane, e non JScrollBar, perchè altrimenti con le tabelle mi da errore al scrollerSinistro.setViewportView(getTabellaSinistra());
perchè vuole uni JScrollPane.
come posso correggere???
c'è un problema, io devo usre 2 JScrollPane.Allora prendi i JScrollBar del JScrollPane tramite gli appositi metodi.
perchè altrimenti con le tabelle mi da errore al scrollerSinistro.setViewportView(getTabellaSinistra());
perchè vuole uni JScrollPane.setViewportView è un metodo di JScrollPane. Serve per impostare il componente da scrollare nel caso non l'avessi già specificato nel costruttore di JScrollPane (o se volessi cambiare componente da scrollare, ovviamente).
franksisca
02-12-2006, 19:38
allora
package user_interface;
import javax.swing.JPanel;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import java.awt.BorderLayout;
import java.awt.GridBagLayout;
import java.awt.GridBagConstraints;
import javax.swing.JButton;
import java.awt.event.AdjustmentEvent;
import java.awt.event.AdjustmentListener;
public class TabellaPayoff extends JFrame implements AdjustmentListener{
private static final long serialVersionUID = 1L;
private JPanel pannello = null;
private JPanel centrale = null;
private int numeroPartite;
private int numeroGiocatori;
private int numeroStrategie;
private JScrollPane scrollerCentrale = null;
private JTable tabellaCentrale = null;
private JPanel laterale = null;
private JScrollPane scrollerSinistro = null;
private JTable tabellaSinistra = null;
private JPanel sotto = null;
private JButton avviaSimulazione = null;
private JButton esci = null;
/**
* This is the default constructor
*/
public TabellaPayoff() {
super();
}
/**
* This method initializes this
*
* @return void
*/
private void initialize() {
this.setSize(600, 500);
this.setContentPane(getPannello());
this.setTitle("Tabella Inserimento dei payoff");
}
/**
* This method initializes pannello
*
* @return javax.swing.JPanel
*/
private JPanel getPannello() {
if (pannello == null) {
BorderLayout borderLayout = new BorderLayout();
borderLayout.setHgap(0);
pannello = new JPanel();
pannello.setLayout(borderLayout);
pannello.add(getCentrale(),BorderLayout.CENTER);
pannello.add(getLaterale(), BorderLayout.WEST);
pannello.add(getScrollerCentrale(), BorderLayout.CENTER);
pannello.add(getSotto(), BorderLayout.SOUTH);
}
return pannello;
}
/**
* This method initializes centrale
*
* @return javax.swing.JPanel
*/
private JPanel getCentrale() {
if (centrale == null) {
GridBagConstraints gridBagConstraints = new GridBagConstraints();
gridBagConstraints.fill = GridBagConstraints.BOTH;
gridBagConstraints.gridy = 0;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.weighty = 1.0;
gridBagConstraints.gridx = 0;
centrale = new JPanel();
centrale.setLayout(new GridBagLayout());
centrale.add(getScrollerCentrale(), gridBagConstraints);
}
return centrale;
}
/**
* This method initializes scrollerCentrale
*
* @return javax.swing.JScrollPane
*/
private JScrollPane getScrollerCentrale() {
if (scrollerCentrale == null) {
scrollerCentrale = new JScrollPane();
scrollerCentrale.getVerticalScrollBar().addAdjustmentListener(this);
scrollerCentrale.setViewportView(getTabellaCentrale());
}
return scrollerCentrale;
}
/**
* This method initializes tabellaCentrale
*
* @return javax.swing.JTable
*/
private JTable getTabellaCentrale() {
if (tabellaCentrale == null) {
String [] colonne=new String[this.getNumeroStrategie()];
for(int i=0;i<colonne.length;++i){
colonne[i]="Strategia n°"+(1+i);
}
String [][]matrice=new String[(int) Math.pow(this.getNumeroStrategie(),this.getNumeroGiocatori()-1)][this.getNumeroStrategie()];
for(int i=0;i<matrice.length;i++){
for(int j=0;j<matrice[0].length;j++){
matrice[i][j]="0,0,0";
}
}
tabellaCentrale = new JTable(matrice,colonne);
}
return tabellaCentrale;
}
/**
* This method initializes laterale
*
* @return javax.swing.JPanel
*/
private JPanel getLaterale() {
if (laterale == null) {
GridBagConstraints gridBagConstraints1 = new GridBagConstraints();
gridBagConstraints1.fill = GridBagConstraints.BOTH;
gridBagConstraints1.weighty = 1.0;
gridBagConstraints1.weightx = 1.0;
laterale = new JPanel();
laterale.setLayout(new GridBagLayout());
laterale.add(getScrollerSinistro(), gridBagConstraints1);
}
return laterale;
}
/**
* This method initializes scrollerSinistro
*
* @return javax.swing.JScrollPane
*/
private JScrollPane getScrollerSinistro() {
if (scrollerSinistro == null) {
scrollerSinistro = new JScrollPane();
scrollerSinistro.getVerticalScrollBar().addAdjustmentListener(this);
scrollerSinistro.setViewportView(getTabellaSinistra());
}
return scrollerSinistro;
}
/**
* This method initializes tabellaSinistra
*
* @return javax.swing.JTable
*/
private JTable getTabellaSinistra() {
if (tabellaSinistra == null) {
String [] colonne=new String[this.getNumeroGiocatori()-1];
for(int i=0;i<colonne.length;++i){
colonne[i]="Giocatore n°"+(1+i);
}
String [][]matrice=new String[(int) Math.pow(this.getNumeroStrategie(),this.getNumeroGiocatori()-1)][this.getNumeroGiocatori()-1];
for(int j=matrice[0].length-1;j>=0;j--){
int cnt=0;
int k=matrice[0].length-1-j;
int count=(int) Math.pow(this.getNumeroStrategie(),k);
System.out.print(count);
for(int i=0;i<matrice.length;i++){
matrice[i][j]="Strategia "+(1+cnt%this.getNumeroStrategie());
count--;
if(count<=0){
count=(int) Math.pow(this.getNumeroStrategie(),k);
cnt++;
}
}
}
tabellaSinistra = new JTable(matrice,colonne);
tabellaSinistra.setEnabled(false);
}
return tabellaSinistra;
}
/**
* This method initializes sotto
*
* @return javax.swing.JPanel
*/
private JPanel getSotto() {
if (sotto == null) {
GridBagConstraints gridBagConstraints2 = new GridBagConstraints();
gridBagConstraints2.gridx = 1;
gridBagConstraints2.gridy = 0;
sotto = new JPanel();
sotto.setLayout(new GridBagLayout());
sotto.add(getAvviaSimulazione(), new GridBagConstraints());
sotto.add(getEsci(), gridBagConstraints2);
}
return sotto;
}
/**
* This method initializes avviaSimulazione
*
* @return javax.swing.JButton
*/
private JButton getAvviaSimulazione() {
if (avviaSimulazione == null) {
avviaSimulazione = new JButton();
avviaSimulazione.setText("Avvia la simulazione");
}
return avviaSimulazione;
}
public void setValori(String text, String text2, String text3) {
this.setNumeroGiocatori(Integer.parseInt(text));
this.setNumeroStrategie(Integer.parseInt(text2));
this.setNumeroPartite(Integer.parseInt(text3));
}
private int getNumeroGiocatori() {
return numeroGiocatori;
}
private void setNumeroGiocatori(int numeroGiocatori) {
this.numeroGiocatori = numeroGiocatori;
}
private int getNumeroPartite() {
return numeroPartite;
}
private void setNumeroPartite(int numeroPartite) {
this.numeroPartite = numeroPartite;
}
private int getNumeroStrategie() {
return numeroStrategie;
}
private void setNumeroStrategie(int numeroStrategie) {
this.numeroStrategie = numeroStrategie;
}
public void avvia() {
this.initialize();
this.setExtendedState(JFrame.MAXIMIZED_BOTH);//this.setSize(Toolkit.getDefaultToolkit().getScreenSize());
this.setVisible(true);
}
/**
* This method initializes esci
*
* @return javax.swing.JButton
*/
private JButton getEsci() {
if (esci == null) {
esci = new JButton();
esci.setText("Esci");
esci.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
System.exit(0);
}
});
}
return esci;
}
public void adjustmentValueChanged(AdjustmentEvent e) {
if (e.getSource () == scrollerCentrale)
scrollerSinistro.getVerticalScrollBar().setValue (scrollerCentrale.getVerticalScrollBar().getValue ());
else if (e.getSource () == scrollerSinistro)
scrollerCentrale.getVerticalScrollBar().setValue (scrollerSinistro.getVerticalScrollBar().getValue ());
}
} // @jve:decl-index=0:visual-constraint="35,4"
non finunzia:D:D:D
senti, sarebbe possibile, eventualmente, evidenziare una riga di una tabella in base alla cella selezionata in un'altra tabella???
tipo, tabella1 e tabella2, seleziono cella di tabella2 [3,4], vogli che mi evidenzi la riga 3 di tabella1, è fattibile???
non finunzia:D:D:DNon funziona per un motivo molto semplice, te lo spiego subito: nel metodo adjustmentValueChanged fai il test sbagliato:
if (e.getSource () == scrollerCentrale)
else if (e.getSource () == scrollerSinistro)Ma il componente "sorgente" che ha inviato l'evento non è il JScrollPane ma il JScrollBar interno!!!
senti, sarebbe possibile, eventualmente, evidenziare una riga di una tabella in base alla cella selezionata in un'altra tabella???
tipo, tabella1 e tabella2, seleziono cella di tabella2 [3,4], vogli che mi evidenzi la riga 3 di tabella1, è fattibile???Sicuramente è fattibile, dovrei però andare a vedere ...
P.S. non mi è molto chiaro perché hai dovuto (o voluto?) spezzettare l'inizializzazione dei vari componenti in più metodi e lasciare così che la creazione venisse fatta "a catena" appena si chiamano i metodi. :stordita:
Non bastava (ed era più semplice) fare la creazione dei componenti e del layout nel costruttore??
franksisca
02-12-2006, 21:35
Non funziona per un motivo molto semplice, te lo spiego subito: nel metodo adjustmentValueChanged fai il test sbagliato:
if (e.getSource () == scrollerCentrale)
else if (e.getSource () == scrollerSinistro)Ma il componente "sorgente" che ha inviato l'evento non è il JScrollPane ma il JScrollBar interno!!!
Sicuramente è fattibile, dovrei però andare a vedere ...
P.S. non mi è molto chiaro perché hai dovuto (o voluto?) spezzettare l'inizializzazione dei vari componenti in più metodi e lasciare così che la creazione venisse fatta "a catena" appena si chiamano i metodi. :stordita:
Non bastava (ed era più semplice) fare la creazione dei componenti e del layout nel costruttore??
per risolvere il problema degli scroller, come faccio, forse così:
if (e.getSource () == scrollerCentrale.getVerticalScrollBar())
scrollerSinistro.getVerticalScrollBar().setValue (scrollerCentrale.getVerticalScrollBar().getValue ());
else if (e.getSource () == scrollerSinistro.getVerticalScrollBar())
scrollerCentrale.getVerticalScrollBar().setValue (scrollerSinistro.getVerticalScrollBar().getValue ());
diciamo che, per il secondo punto.....ha deciso Visual Editor :D :D :D :D
franksisca
03-12-2006, 00:39
risolto, come avevo detto io nell'ultimo post
if (e.getSource () == scrollerCentrale.getVerticalScrollBar())
scrollerSinistro.getVerticalScrollBar().setValue (scrollerCentrale.getVerticalScrollBar().getValue ());
else if (e.getSource () == scrollerSinistro.getVerticalScrollBar())
scrollerCentrale.getVerticalScrollBar().setValue (scrollerSinistro.getVerticalScrollBar().getValue ());Esatto. L'unica cosa è che ci sono troppi getXXXScrollBar() per i miei gusti. Io personalmente avrei preferito tenere dei riferimenti diretti alle scroll-bar.
diciamo che, per il secondo punto.....ha deciso Visual Editor :D :D :D :DIl Visual Editor ... quello di Eclipse? ... genera codice così??? :O Premetto che non ho mai usato Eclipse ma se un giorno lo userò, mi terrò ben lontano dal Visual Editor. Non sono un guru di Java e il codice che hai postato l'ho trovato molto ingarbugliato!
franksisca
03-12-2006, 18:59
Il Visual Editor ... quello di Eclipse? ... genera codice così??? :O Premetto che non ho mai usato Eclipse ma se un giorno lo userò, mi terrò ben lontano dal Visual Editor. Non sono un guru di Java e il codice che hai postato l'ho trovato molto ingarbugliato!
si, ma ti assicuro che, anche se è la mia prima volta, lo ingarbuglia un poco, ma nulla di chè, in fin dei conti sempre meglio di JBuilder.
vBulletin® v3.6.4, Copyright ©2000-2026, Jelsoft Enterprises Ltd.