"We are back" « oc.at

HELP: [Java] JScrollPane+JList Probleme

prayerslayer 17.03.2008 - 14:18 2752 14
Posts

prayerslayer

Oar. Mh.
Avatar
Registered: Sep 2004
Location: vorm Sucher
Posts: 4073
moin moin.

ja, titel sagt eh schon viel. ich hab unabhängig voneinander 2 jlists, die die netbeans standardmäßig gleich in eine jscrollpane einbetten. dann hol ich mir objekte aus der datenbank und zeig sie in den lists an -> die objekte haben eine toString() methode und geb sie einfach mit .add() ins entsprechende defaultlistmodel.

problem: die scrollpane ist entweder nicht "lang" genug...

click to enlarge

...oder zwar da (weil ich die konstante zum anzeigen auf ALWAYS gestellt hab), aber tut nix.

click to enlarge

das einzige, was mir einfällt, woran es liegen _könnte_, wäre dass ich die preferredSize von den scrollpanes verändert hab. aber das kann's nicht wirklich sein oder?

hat wer tipps? ich check das gar nicht... tia
Bearbeitet von prayerslayer am 10.01.2009, 19:05

prayerslayer

Oar. Mh.
Avatar
Registered: Sep 2004
Location: vorm Sucher
Posts: 4073
keine ideen? bei anderen listen funktioniert es nämlich, voll komisch. und ich hab bis jetzt keine zeit gehabt zu schauen, obs im code unterschiede gibt...

prayerslayer

Oar. Mh.
Avatar
Registered: Sep 2004
Location: vorm Sucher
Posts: 4073
ich hab inzwischen versucht, den viewport von den scrollpanes per hand zu setzen, hat nix gebracht.
außerdem hab ich geschaut, ob ich irgendwo was anders gemacht habe, aber es ist bei jeder list das gleiche.

Code: PHP
private DefaultListModel dlmListmodel = new DefaultListModel();
...
liListe.setModel(dlmListModel);

und später halt irgendwann mal dlmListModel.removeAllElements() und neu befüllen und so. aber nix besonderes.

DKCH

Administrator
...
Registered: Aug 2002
Location: #
Posts: 3326
ich versteh ehrlich gesagt die beschreibung deines problems nicht wirklich... die größe beeinflußt du natürlich mit der preferredsize, aber ob das deine frage war? :D

prayerslayer

Oar. Mh.
Avatar
Registered: Sep 2004
Location: vorm Sucher
Posts: 4073
Zitat von DKCH
ich versteh ehrlich gesagt die beschreibung deines problems nicht wirklich... die größe beeinflußt du natürlich mit der preferredsize, aber ob das deine frage war? :D

das ist mir schon klar. aber die frage ist: warum ist die scrollpane entweder nicht lang genug oder gar nicht da? ob _das_ mit der preferredSize zusammenhängen kann (glaub ich eh nicht, wär ja unlogisch und bei anderen lists funktioniert es ja)?

DKCH

Administrator
...
Registered: Aug 2002
Location: #
Posts: 3326
hm, hast du ein einfaches beispiel mit dem sich das reproduzieren lässt?

prayerslayer

Oar. Mh.
Avatar
Registered: Sep 2004
Location: vorm Sucher
Posts: 4073
fuh, ich glaub nicht. so schauen die betroffenen zeilen für die eine list aus, wo gar keine scrollpane vorhanden zu sein scheint. ein kleines prog, dass das gleiche problem hat, versuch ich später zu schreiben.

Code: PHP
public class MainFrame extends javax.swing.Frame
{
  private DefaultListModel dlmInfovs = new DefaultListModel();

  public MainFrame ()
  {
    setComponents();
  }

  private void setComponents()
  {
    liInfoveranstaltungen.setModel(dlmInfovs);
    refreshInfoveranstaltungen(); //try-catch hab ich jetzt weggelassen
  }

  private void refreshInfoveranstaltungen() throws ClassNotFoundException, SQLException, Exception
  {
    dlmInfovs.removeAllElements();
    Vector<Infoveranstaltung> info = DBAccess.getInfoveranstaltungen();
    Enumeration en = info.elements();
    while (en.hasMoreElements())
    {
      Infoveranstaltung i = (Infoveranstaltung)en.nextElement();
      dlmInfovs.addElement(i);
    }
  }
}

die funktion in der DBAccess schaut so aus:

Code: PHP
public static Vector<Infoveranstaltung> getInfoveranstaltungen() throws ClassNotFoundException, SQLException
{
  Vector<Infoveranstaltung ret = new Vector<Infoveranstaltung>();
  Connection knexon = dbpool.getConnection();
  String sql = "SELECT * FROM Infoveranstaltung ORDER BY ZeitVon DESC";
  PreparedStatement stat = knexon.prepareStatement(sql);
  ResultSet rs = stat.executeQuery();
  while (rs.next())
  {
    ret.add(new Infoveranstaltung(rs.getInt("InfoveranstaltungID") /*usw*/);
  }
  rs.close();
  stat.close();
  dbpool.releaseConnection(knexon);
  return ret;
}

DKCH

Administrator
...
Registered: Aug 2002
Location: #
Posts: 3326
den üblichen repaint-aufruf nach setModel hast eh drin?

edit: validate am panel schadet auch ned...

prayerslayer

Oar. Mh.
Avatar
Registered: Sep 2004
Location: vorm Sucher
Posts: 4073
huch? nein, das hab ich aber auch noch nie gemacht :eek:

DKCH

Administrator
...
Registered: Aug 2002
Location: #
Posts: 3326
jo, brauchen solltest es seit wwi wann eigentlich eh nimmer, aber hin und wieder hilfts ;)

i würd halt mal probieren nach dem refreshInfoveranstaltungen()-aufruf this.revalidate() this.repaint() aufzurufen...

prayerslayer

Oar. Mh.
Avatar
Registered: Sep 2004
Location: vorm Sucher
Posts: 4073
nope, haut nicht hin :(

prayerslayer

Oar. Mh.
Avatar
Registered: Sep 2004
Location: vorm Sucher
Posts: 4073
problem ist wieder aktuell :D

meepmeep

Here to stay
Avatar
Registered: Feb 2006
Location: Wien
Posts: 2339
wenn du add machst schreibt er dir die elemente eh in die liste oder? ergo repainted er eh

was du versuchen könntest:
- Die elemente in einen vektor schreiben und dann mit jList.setListData(Vector<?> val); in die list setzen.
- (jList) das property autoscrolls auf enabled setzen
- (ScrollPane) das property verticalScrollBarPolicy auf ALWAYS setzen
- (ScrollPane) das Property wheelScrollingEnabled setzen und dann schaun obs damit geht

prayerslayer

Oar. Mh.
Avatar
Registered: Sep 2004
Location: vorm Sucher
Posts: 4073
die elemente schreibt er in die liste, ja. alle. aber es sind ja nur knapp 140 entrys in der table, zuviele könnens auch nicht sein.

- elemente sind in einem vektor, setListData macht aber keinen unterschied
- autoscrolls ist on
- vertialscrollbarpolicy ist always
- wheelscrolling ist on

immer noch dasselbe! :(

prayerslayer

Oar. Mh.
Avatar
Registered: Sep 2004
Location: vorm Sucher
Posts: 4073
ich habs jetzt zufällig herausgefunden. ihr wollt sicher wissen was es war...

...preferredSize von JList und JScrollPane hatten unterschiedliche Werte :o also lösung: pS von der list auf default setzen und von der scrollpane einstellen, wie man will.
Bearbeitet von prayerslayer am 10.01.2009, 19:17
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz