Swing Problem mit JList und MVC

B

booleanperhaps

Gast
Hallo zusammen

mein Problem ist eigentlich recht simpel aber eine Antwort hab ich im Netz leider nicht gefunden. Ich habe eine Liste die ich gerne befüllen möchte durch einen Mausklick der ein Popupmenü öffnet, das einen anbietet einen neuen Eintrag zu erstellen. Ich hab das ganze so getrennt damit es dem MVC-Pattern gerecht wird, aber es funktioniert einfach nicht. Die Liste wird nicht geupdate aber der Debugger sagt mir das ein Element zum Model hinzugefügt wurde, was eigentlich heißen müsste das auch die Liste was davon mitbekommt, was sie aber nicht tut.

Hier mal die abgespeckte Version ohne Popupmenü etc. Das DefaultListModel hab ich nicht erweitert, da mir wichtig war das ich erstmal die grundlegende Funktion verstehe und zum laufen bringe.

View
[JAVA=42]public class JListTest extends JFrame{

private static JListTest instance = null;

private JList list = new JList();

private TestModel model = new TestModel();

public static JListTest getInstance() {
if(instance == null){
return instance = new JListTest();
}else{
return instance;
}
}
public ListModel getModel(){
return list.getModel();
}
public static void main(String[] args) {
new JListTest();
}

public JListTest() {
this.setContentPane(testpane());
this.pack();
this.setVisible(true);
}

public JList testpane(){
list.setModel(model);
list.addMouseListener(new TestMouseListener());
list.setLayoutOrientation(JList.VERTICAL_WRAP);
return list;
}
}[/code]

Model
[JAVA=42]public class TestModel extends DefaultListModel{

}[/code]

[JAVA=42]public class TestMouseListener extends MouseAdapter{

@Override
public void mouseClicked(MouseEvent mEvent) {

if ((mEvent.getModifiers() & InputEvent.BUTTON1_MASK) != 0) {

} if ((mEvent.getModifiers() & InputEvent.BUTTON2_MASK) != 0) {

} if ((mEvent.getModifiers() & InputEvent.BUTTON3_MASK) != 0 && SwingUtilities.isRightMouseButton(mEvent)) {
JListTest jlt = JListTest.getInstance();
DefaultListModel dlm = (DefaultListModel)jlt.getModel();
dlm.addElement("String");

}
}
}[/code]

Mir ist klar das ich das DLM auch direkt in die View packen kann, wo dann das updaten auch funtkioniert, aber das ist eben nicht mein Ziel.


Würde mich freuen wenn mir jemand helfen könnte.
 
B

booleanperhaps

Gast
Hab ich bereits versucht per repaint() oder repaint(instance.getBounds()); geht beides nicht.

Aja und nimmt's nicht so genau mit public und private, ich hab die Methoden ausversehen beim testen als public deklariert. Nicht das jemand meint das ich mich erstmal über Sichtbarkeiten und Singelton informieren soll.
 
G

Gast2

Gast
Hab ich bereits versucht per repaint() oder repaint(instance.getBounds()); geht beides nicht.

Aja und nimmt's nicht so genau mit public und private, ich hab die Methoden ausversehen beim testen als public deklariert. Nicht das jemand meint das ich mich erstmal über Sichtbarkeiten und Singelton informieren soll.

Hier mal ein Beispiel wies geht
Java:
public class JListTest extends JFrame{
 
    public static void main(String[] args) {
        new JListTest();
    }
    
    public JListTest() {
    	setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    	DefaultListModel defaultListModel = new DefaultListModel();
    	JList jList = new JList(defaultListModel);
    	jList.addMouseListener(new MyMouseListener());
    	add(new JScrollPane(jList));
    	this.pack();
        this.setVisible(true);
    }
    
    private class MyMouseListener extends MouseAdapter{
    	
    	@Override
    	public void mousePressed(MouseEvent e) {
        	JList jList = (JList)e.getSource();
        	DefaultListModel defaultListModel = (DefaultListModel) jList.getModel();
        	defaultListModel.addElement("Test");
    	}
    }
    
}


Versteh nicht warum du es so kompliziert machst.
1. Von einem Frame nicht den ContentPane überschreiben.
2. Eine Liste in eine ScrollPane packen
3. Für was das extra Model?
4. Du benötigtst keine singelton dafür.
 
B

booleanperhaps

Gast
Verstehe nicht was daran "kompliziert" sein soll

1. Warum nicht, was ist daran falsch?
2. Später wenn es läuft oder ist das zum updaten der Liste essenziell?
3. Für Funktionen die ich später einbauen will
4. Da bin ich mir nicht sicher ob ich einen brauche oder nicht. Wenn ich einen Eintrag selektiere soll mir später gewisse Daten aus einer Datenbank gebündelt angezeigt werden und anstatt jedes mal eine neue Instanz einer JList zu benutzen verwende ich die bereits existierende.

Ich will alles getrennt haben damit der Code übersichtlicher ist, auch wenn es auf den ersten Blick umständlich aussieht. Von Innerclasses halte ich recht wenig und die tragen in zu vielen fällen zu Missverständnissen des Codes bei. Actions sind komplett ausgelagert in eigene Klassen, Views bestehen nur aus den grafischen Komponenten die ich brauche, etc, etc

Um noch ein bisschen genauer zu sein: JList + rechter Mouseclick -> Popupmenu + selection von Menuitem zum anlegen -> anzeigen eines Textfeldes. Der Text wird vom Textfeld geholt und dadurch wird ein neuer Eintrag erstellt. Aus einem anderen Teil des Programms werden Daten selektiert die man dem Listen-Eintrag hinzufügen kann.
 
G

Gast2

Gast
Schau dein Code an schau meinen an und du frägst was bei dir kompliziert ist???

1. Warum willst du den ContentPane überschreiben?
2. Sonst werden deine Objekte rausgeschnitten
3. Kann ich nichts dazu sagen aber bis jetzt sehe ich nicht warum du ein eigenes ListModel brauchst?
Was sollen den dort für Funktionionen rein, die nicht vorhanden sind? Das hört sich nach falscher Trennung an...
4. was??? Kein wort verstanden ^^... Wenn du ein richtiges ObserverPattern einbaust musst du doch nich jedes mal eine neue Liste anlegen? Model ändert sich Liste stellt sich neu dar.

Ich würde auch keine innere Klasse machen, das war exemplarisch...
Ich würde einen anonymen MouseAdapter als Controller implementieren und nicht ein extra Klasse machen.

Um noch ein bisschen genauer zu sein: JList + rechter Mouseclick -> Popupmenu + selection von Menuitem zum anlegen -> anzeigen eines Textfeldes. Der Text wird vom Textfeld geholt und dadurch wird ein neuer Eintrag erstellt. Aus einem anderen Teil des Programms werden Daten selektiert die man dem Listen-Eintrag hinzufügen kann.

dafür gibt set schon fertige methoden... nicht bei jedem user und os ist die rechte maustaste das kontextmenü, dass kann jeder user selber bestimmen manche haben es auch auf der mitteltaste!!!
Darum benutzt man
Code:
jList.setComponentPopupMenu(popup)

EDIT:
Vielleicht schadet es nicht den Link mal durch zu lesen
http://www.java-forum.org/awt-swing-swt/112503-mvc-projekt-umsetzen.html
 
Zuletzt bearbeitet von einem Moderator:
B

booleanperhaps

Gast
1. Kein spezieller Grund. Normalerweise hockt die Liste auf 'nem Panle welches den Frame überschreibt. Hab das so gelernt und auch bei den Beispielen von Sun/Oracle steht: frame.setContentPane(xyz);
2. Öh ... wenn ich das Fenster langziehe seh ich die Einträge die ich angelegt habe, zumindest wenn das DLM direkt in der View hängt
3. Zugriff auf Propertyfiles
4. Um auf das Model zuzugreifen geh ich über die Instanz meiner Liste, anders müsste ich mein Model neu initialisieren wenn es nicht direkt in der View hängt, oder nicht?

Danke für den Tipp bezüglich setComponentPopupMenu.
 
G

Gast2

Gast
1. Kein spezieller Grund. Normalerweise hockt die Liste auf 'nem Panle welches den Frame überschreibt. Hab das so gelernt und auch bei den Beispielen von Sun/Oracle steht: frame.setContentPane(xyz);
2. Öh ... wenn ich das Fenster langziehe seh ich die Einträge die ich angelegt habe, zumindest wenn das DLM direkt in der View hängt
3. Zugriff auf Propertyfiles
4. Um auf das Model zuzugreifen geh ich über die Instanz meiner Liste, anders müsste ich mein Model neu initialisieren wenn es nicht direkt in der View hängt, oder nicht?

Danke für den Tipp bezüglich setComponentPopupMenu.

1. Mhm wo hast du das gesehen?
How to Use Lists (The Java™ Tutorials > Creating a GUI With JFC/Swing > Using Swing Components)
2. Ja wenn du es langziehst aber wenn man die Einträge nicht sieht ist doch schön wenn man scrollen kann ohne immer das ganze Fenster zu verschieben ist auch nur ein Vorschlag...
3. Sich dass du das in einem GUI Model machen willst?
4. he sorry kapier ich nicht?!? Link gelesen da ist doch ein Beispiel mit einer Liste und wie diese geupdatet wird.
 
B

booleanperhaps

Gast
Normalerweise hockt die Liste auf 'nem Panle welches den Frame überschreibt. Hab das so gelernt und auch bei den Beispielen von Sun/Oracle steht: frame.setContentPane(xyz);

Hab ich ja gesagt, was ist daran verkehrt? Leitet beides von JComponent ab
 
B

booleanperhaps

Gast
JFrame (Java Platform SE 6)

Swing's painting architecture requires an opaque JComponent in the containment hiearchy. This is typically provided by the content pane. If you replace the content pane it is recommended you replace it with an opaque JComponent.

Trifft beides auf die JList zu, prüf's doch mal mit isOpaque();
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Q JList Update Problem AWT, Swing, JavaFX & SWT 1
U Swing Problem bei der Darstellung "komplexer Objecte" in einer JList mit AbstractListModel: AWT, Swing, JavaFX & SWT 3
W JInternalFrame + JList Problem AWT, Swing, JavaFX & SWT 5
B Swing Problem beim Elemente zu JList hinzufügen AWT, Swing, JavaFX & SWT 5
P JList Index Ändern Problem AWT, Swing, JavaFX & SWT 4
G Problem mit JList AWT, Swing, JavaFX & SWT 5
R JButton in JList - MouseEvent-Problem AWT, Swing, JavaFX & SWT 12
P Problem mit locationToIndex in JList AWT, Swing, JavaFX & SWT 6
A Nochmals Problem mit der JList AWT, Swing, JavaFX & SWT 3
A Problem mit JList! Textfarbe lässt sich nicht ändern! AWT, Swing, JavaFX & SWT 7
J JList problem AWT, Swing, JavaFX & SWT 4
W JList JScrollPane Problem AWT, Swing, JavaFX & SWT 3
H JList Problem AWT, Swing, JavaFX & SWT 4
T Problem mit JList AWT, Swing, JavaFX & SWT 10
J JList + mouseadapter + popupmenue = problem AWT, Swing, JavaFX & SWT 4
V Selection Problem mit JList AWT, Swing, JavaFX & SWT 2
E Problem mit JScrollPane und JList AWT, Swing, JavaFX & SWT 4
V Problem mit Aktualisieren von JList mit Threads AWT, Swing, JavaFX & SWT 3
G JList und JScrollPane Problem AWT, Swing, JavaFX & SWT 2
Luma Problem mit JList AWT, Swing, JavaFX & SWT 3
G Problem mit JPanel und JList AWT, Swing, JavaFX & SWT 3
R problem mit JList AWT, Swing, JavaFX & SWT 5
Juelin Problem mit TextField.requestFocus(); AWT, Swing, JavaFX & SWT 12
Juelin Problem beim Laden Controller AWT, Swing, JavaFX & SWT 2
G Problem mit der Anzeige von jLabel. Unlesbar wenn der Text geändert wird. AWT, Swing, JavaFX & SWT 28
H 2D-Grafik Problem mit Paint AWT, Swing, JavaFX & SWT 1
S Layout - Problem AWT, Swing, JavaFX & SWT 1
Tassos JavaFX/Problem mit der Maussteuerung in Stackpane AWT, Swing, JavaFX & SWT 7
sserio Java Fx - Problem AWT, Swing, JavaFX & SWT 3
A Problem Spiel auf Panel der GUI zu bringen AWT, Swing, JavaFX & SWT 1
A JavaFX Controller Problem AWT, Swing, JavaFX & SWT 1
TheWhiteShadow JavaFX ListView Problem beim Entfernen von Elementen AWT, Swing, JavaFX & SWT 1
E LayoutManager Welcher Layout-Mix löst mein Problem? AWT, Swing, JavaFX & SWT 3
Umb3rus JavaFX Problem mit PropertyValueFactory: can not read from unreadable property AWT, Swing, JavaFX & SWT 1
T Problem mit paintComponent() AWT, Swing, JavaFX & SWT 17
AmsananKING Java Menü-Problem AWT, Swing, JavaFX & SWT 1
K JavaFX Resizing-Problem beim BorderLayout (Center Component) beim Arbeiten mit mehreren FXMLs AWT, Swing, JavaFX & SWT 2
G Instance OF Problem AWT, Swing, JavaFX & SWT 9
FrittenFritze Ein Problem mit der CSSBox, die Größe wird nicht angepasst AWT, Swing, JavaFX & SWT 5
M Problem mit dem Anzeigen von Frames im Vordergrund AWT, Swing, JavaFX & SWT 5
Badebay Problem mit JButton AWT, Swing, JavaFX & SWT 2
newJavaGeek Grid-Layout problem AWT, Swing, JavaFX & SWT 7
J JavaFX Löschen im Tabelview macht Problem AWT, Swing, JavaFX & SWT 15
JavaTalksToMe JavaFx ExekutorService Problem AWT, Swing, JavaFX & SWT 2
Zrebna Problem bei Eventhandling (Value soll nach jedem erneutem Klick gelöscht werden) AWT, Swing, JavaFX & SWT 4
B Problem mit JavaFX AWT, Swing, JavaFX & SWT 5
J css Problem AWT, Swing, JavaFX & SWT 5
B JavaFX habe mein Problem fett markiert AWT, Swing, JavaFX & SWT 2
A Swing Filter-Problem AWT, Swing, JavaFX & SWT 1
temi JavaFX Problem mit IntelliJ und JavaFx 11 unter XUbuntu AWT, Swing, JavaFX & SWT 3
L Java FX Problem mit Ubuntu 18 und JavaFx AWT, Swing, JavaFX & SWT 27
H JTable TableCellEditor-Problem AWT, Swing, JavaFX & SWT 0
kodela Swing Problem mit Warten-Dialog AWT, Swing, JavaFX & SWT 16
B JavaFx Scene Builder Problem AWT, Swing, JavaFX & SWT 2
B [Problem] Java öffnet Word-Datein nicht AWT, Swing, JavaFX & SWT 14
T DataBinding Problem AWT, Swing, JavaFX & SWT 5
Blender3D Problem mit € Symbol Font Gotham Windows 10 Swing AWT, Swing, JavaFX & SWT 11
T Problem mit JTable Sortierung AWT, Swing, JavaFX & SWT 2
J Problem mit Platfrom run later AWT, Swing, JavaFX & SWT 15
J Problem mit Platfrom run later AWT, Swing, JavaFX & SWT 0
D Swing SwingUtils / Thread Problem AWT, Swing, JavaFX & SWT 3
L JavaFX Problem beim Aufrufen einer Methode AWT, Swing, JavaFX & SWT 5
T Swing Problem mit Datum und FormattedTextField AWT, Swing, JavaFX & SWT 2
S AWT Java print dialog Problem AWT, Swing, JavaFX & SWT 0
olfibits JavaFX Problem mit HTMLEditor AWT, Swing, JavaFX & SWT 0
W SWT hover-background-problem with first column in TreeViewer AWT, Swing, JavaFX & SWT 0
M Problem mit Add JScrollPane AWT, Swing, JavaFX & SWT 25
Mario1409 Swing JTextArea scroll Problem AWT, Swing, JavaFX & SWT 0
N Swing Problem mit loop AWT, Swing, JavaFX & SWT 2
S Swing Problem mit Button und ActionListener AWT, Swing, JavaFX & SWT 5
S Swing & Clean und build Problem AWT, Swing, JavaFX & SWT 12
S JLabel setText() Problem AWT, Swing, JavaFX & SWT 6
I 2D-Grafik Problem beim Ändern der Farbe eine 2d Objekts AWT, Swing, JavaFX & SWT 3
G Swing Splitpane Problem AWT, Swing, JavaFX & SWT 1
F Problem mit der FXML Rectangle Shape AWT, Swing, JavaFX & SWT 2
N JavaFX Stranges Problem mit der Autoscroll-Eigenschaft von Textareas AWT, Swing, JavaFX & SWT 0
E Java FX FXML Problem mit html Scriptausführung AWT, Swing, JavaFX & SWT 2
J JavaFX Intersect Problem mit Shapes AWT, Swing, JavaFX & SWT 10
R JavaFX MediaPlayer AVI-Problem AWT, Swing, JavaFX & SWT 1
M Swing Problem mit ListCellRenderer AWT, Swing, JavaFX & SWT 7
D Problem mit JTable AWT, Swing, JavaFX & SWT 1
F GUI Auflösung ändern - Koordianten und Proportions Problem AWT, Swing, JavaFX & SWT 21
J Problem mit Button darstellung AWT, Swing, JavaFX & SWT 23
M Problem mit Layoutmanagern... Hilfe wäre sehr nett. AWT, Swing, JavaFX & SWT 2
S 2D-Grafik Problem mit Variablen AWT, Swing, JavaFX & SWT 4
7 JavaFX Problem beim Zeichnen eines Dreiecks in einem GUI AWT, Swing, JavaFX & SWT 6
M Swing AttributiveCellTableModel addRow() Problem AWT, Swing, JavaFX & SWT 1
J Swing Problem mit Graphics Methode AWT, Swing, JavaFX & SWT 4
N JavaFX Problem mit table multiple selection AWT, Swing, JavaFX & SWT 5
K CheckBox Problem AWT, Swing, JavaFX & SWT 5
Grevak DisplayMode Problem seit Windows 10 AWT, Swing, JavaFX & SWT 2
S Swing Eigene JComboBox Problem! AWT, Swing, JavaFX & SWT 1
B Swing Problem mit Bildpfad AWT, Swing, JavaFX & SWT 4
N Swing Problem beim Scrollen mit JScrollPane AWT, Swing, JavaFX & SWT 6
V Graphics g - drawOval problem mit background AWT, Swing, JavaFX & SWT 1
C AWT Problem mit Protokol Fenster AWT, Swing, JavaFX & SWT 0
M Swing pack() Problem mit Taskleiste AWT, Swing, JavaFX & SWT 4
N Swing Choice- Problem! AWT, Swing, JavaFX & SWT 8
Q "AWT-EventQueue-0" Exception Problem AWT, Swing, JavaFX & SWT 4
D jButton Problem, ein Rieser Button bedeckt das ganze frame AWT, Swing, JavaFX & SWT 1

Ähnliche Java Themen

Neue Themen


Oben