HELP: [Java] JScrollPane+JList Probleme

Seite 1 von 1 - Forum: Coding Stuff auf overclockers.at

URL: https://www.overclockers.at/coding-stuff/help_java_jscrollpanejlist_probleme_192964/page_1 - zur Vollversion wechseln!


prayerslayer schrieb am 17.03.2008 um 14:18

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


prayerslayer schrieb am 19.03.2008 um 14:24

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 schrieb am 01.04.2008 um 14:29

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 schrieb am 01.04.2008 um 15:01

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 schrieb am 02.04.2008 um 13:01

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 schrieb am 03.04.2008 um 08:33

hm, hast du ein einfaches beispiel mit dem sich das reproduzieren lässt?


prayerslayer schrieb am 03.04.2008 um 11:19

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 schrieb am 04.04.2008 um 11:59

den üblichen repaint-aufruf nach setModel hast eh drin?

edit: validate am panel schadet auch ned...


prayerslayer schrieb am 07.04.2008 um 09:28

huch? nein, das hab ich aber auch noch nie gemacht :eek:


DKCH schrieb am 07.04.2008 um 09:57

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 schrieb am 13.05.2008 um 11:10

nope, haut nicht hin :(


prayerslayer schrieb am 20.12.2008 um 19:33

problem ist wieder aktuell :D


meepmeep schrieb am 21.12.2008 um 13:09

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 schrieb am 05.01.2009 um 17:40

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 schrieb am 10.01.2009 um 19:04

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.




overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2025