Toon posts:

[JAVA] 1 van de 2 JPanel's niet zichtbaar op andere pc

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben bezig met het schrijven van een applicatie voor iemand maar de applicatie ziet er bij die persoon op de pc anders uit dan bij mij op de pc. Het scherm bestaat uit een JFrame die 2 JPanel's bevat. Beide JPanel's hebben een Border dus aan de Border kan je herkennen dat er 2 JPanel's op het scherm staan. Nu is het zo dat er bij die persoon maar 1 JPanel zichtbaar is! Wanneer ik dezelfde jar bij mij thuis opstart is wel alles zichtbaar. Het vreemde is dat het wel heeft gewerkt bij die persoon. We gebruiken dezelfde JRE en het opnieuw installeren van de JRE bij die persoon heeft het probleem niet opgelost. Het zou kunnen liggen aan een gecombineerd gebruik van Swing- en Awt-componenten maar dat doe ik niet :) Het enige component niet van Swing is de cursor. Maar dan nog kan dat niet het probleem zijn want bij mij werkt het wel allemaal gewoon. Er worden ook geen Exceptions gegooid. Op Google en GoT heb ik geen gelijke problemen gevonden. Heeft iemand een idee hoe het kan dat bij de ene persoon maar 1 JPanel zichtbaar is en bij de andere persoon wel alles zichtbaar is? Terwijl we dezelfde code en JRE gebruiken!

Verwijderd

Gebruik je layoutmanagers?
Staat de lookAndFeel van Swing op het DefaultOSLookAndFeel of op het swing MetalLookAndFeel ?

edit:
gebruiken jullie beide hetzelfde OS?

[ Voor 21% gewijzigd door Verwijderd op 13-01-2005 14:45 ]


Verwijderd

Topicstarter
Voor het JFrame gebruik ik geen LayoutManager. In het JFrame heb ik alleen de aanroep

Java:
1
setDefaultLookAndFeelDecorated(true);


erin staan. Naar mijn weten hebben we beide hetzelfde OS (Win2K). Het vreemde blijft dat het wel gewerkt heeft (er zijn geen veranderingen gedaan tussendoor) en bij mij werkt het nog steeds :?

Verwijderd

Topicstarter
Even een kick, heeft iemand ooit dit probleem gehad?

Verwijderd

Het komt redelijk vaag over. Post anders even het deel van je code waarin je de frames en panels aanmaakt en zichtbaar maakt.
Je zou ook het JFrame.setDefaultLookAndFeelDecorated(true); kunnen veranderen in
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());

Je zou logischerwijs zeggen dat juist het eerste beter zou moeten gaan, maar misschien gebeurd er wel iets waardoor je het ineens ziet.

Overigens is het misschien wel aan te bevelen om alsnog een layoutmanager te gebruiken. Al is het alleen maar zodat het met resizen ook allemaal goed gaat.

Verwijderd

Topicstarter
Het is zeker een vaag probleem en des te moeilijker om een volledig probleemomschrijving te geven. Dit is in ieder de geval de code die het JFrame moet laten zien:

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
private void createAndShowGUI() {
        
        setDefaultLookAndFeelDecorated(true);
        
        setTitle(FRAME_TITLE);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
        // create FilePanel for selecting files to analyse
        _filePanel = new FilePanel(this);
        _filePanel.setPreferredSize(new Dimension(200, 600));
        _filePanel.setBorder(BorderFactory.createCompoundBorder(
                BorderFactory.createTitledBorder(TITLE_FILEPANEL),
                BorderFactory.createEmptyBorder(5,5,5,5)));
        
        // create StatisticPanel to show statistics about analysed files
        _statisticPanel = new StatisticPanel(this);
        _statisticPanel.setPreferredSize(new Dimension(600, 600));
        _statisticPanel.setBorder(BorderFactory.createCompoundBorder(
                BorderFactory.createTitledBorder(TITLE_STATISTICPANEL),
                BorderFactory.createEmptyBorder(5,5,5,5)));

        // create JPanel which contains the other JPanels
        JPanel mainPanel = new JPanel();
        
        // add FilePanel and StatisticPanel to the JPanel
        mainPanel.add(_filePanel);
        mainPanel.add(_statisticPanel);
        
        // add main JPanel to the JFrame
        getContentPane().add(mainPanel);
        
        pack();
        setVisible(true);
    }


Je andere 2 tips zal ik gelijk eens proberen, bedankt!

  • Daos
  • Registratie: Oktober 2004
  • Niet online
Als je het venster verkleint, dan komen de panels onder elkaar te staan. Waanschijnlijk gebruikt die andere een resolutie van 800 x 600.


Als dat zo is, dan is het zo op te lossen:
Java:
1
2
3
4
// add main JPanel to the JFrame
// getContentPane().add(mainPanel);
JScrollPane jScrollPane = new JScrollPane(mainPanel);
getContentPane().add(jScrollPane);



Verder nog:
Volgens mij gebruik je normaal show() ipv setVisible(true) om het venster op je scherm te toveren.

Ik loop weer eens een beetje achter. Tot en met 1.4.2 kon je show() gebruiken. Sinds 1.5.0 niet meer.

[ Voor 79% gewijzigd door Daos op 17-01-2005 14:20 ]


Verwijderd

Topicstarter
Daos schreef op maandag 17 januari 2005 @ 12:30:
Als je het venster verkleint, dan komen de panels onder elkaar te staan. Waanschijnlijk gebruikt die andere een resolutie van 800 x 600.


Als dat zo is, dan is het zo op te lossen:
Java:
1
2
3
4
// add main JPanel to the JFrame
// getContentPane().add(mainPanel);
JScrollPane jScrollPane = new JScrollPane(mainPanel);
getContentPane().add(jScrollPane);



Verder nog:
Volgens mij gebruik je normaal show() ipv setVisible(true) om het venster op je scherm te toveren.
Dat van de resolutie is een goede, daar had ik nog niet aan gedacht! Wat betreft show(), die is deprecated. In de API docs staat dat ik setvisible() moet gebruiken.
Verder nog:
Volgens mij gebruik je normaal show() ipv setVisible(true) om het venster op je scherm te toveren.

Ik loop weer eens een beetje achter. Tot en met 1.4.2 kon je show() gebruiken. Sinds 1.5.0 niet meer.
Volgens mij loop je weer achter want ik heb het over Swing, jij hebt het over AWT ;) In Swing is show() al deprecated vanaf 1.1 :)

[ Voor 24% gewijzigd door Verwijderd op 17-01-2005 16:09 ]


Verwijderd

Ongeacht wat voor een LayoutManagers (al is het null) de twee panels hebben, heeft je contentpane iig geen layoutmanager. Dat betekend dus dat de filePane en de statisticsPane er volgens de FlowLayout opgezet worden. Naast elkaar of onder elkaar, gezien waar ruimte is.

Je kunt de rootPane bijvoorbeeld een BorderLayout geven met getContentPane().setLayout(new BorderLayout());
Je kunt dan aangeven waar je je panels wilt neerzetten:
Bijvoorbeeld getContentPane().add(filePanel, BorderLayout.WEST); en de andere op EAST (of NORTH en SOUTH, of CENTER en SOUTH.

Ik zou dat iig eens proberen.

Verwijderd

Topicstarter
Verwijderd schreef op maandag 17 januari 2005 @ 16:46:
Ongeacht wat voor een LayoutManagers (al is het null) de twee panels hebben, heeft je contentpane iig geen layoutmanager. Dat betekend dus dat de filePane en de statisticsPane er volgens de FlowLayout opgezet worden. Naast elkaar of onder elkaar, gezien waar ruimte is.

Je kunt de rootPane bijvoorbeeld een BorderLayout geven met getContentPane().setLayout(new BorderLayout());
Je kunt dan aangeven waar je je panels wilt neerzetten:
Bijvoorbeeld getContentPane().add(filePanel, BorderLayout.WEST); en de andere op EAST (of NORTH en SOUTH, of CENTER en SOUTH.

Ik zou dat iig eens proberen.
Ik gooi die 2 JPanel's eerst op 1 JPanel (heet mainPanel in de code) en die gooi ik op het JFrame. Het probleem is dus dat 1 van die 2 JPanel's op die mainPanel niet zichtbaar is, ik besef nu dat ik mijn probleem verkeerd heb omschreven |:( Ik heb nu mainPanel een BoxLayout met X_AXIS gegeven (zodat de toegevoegde componenten horizontaal naast elkaar komen). Ik heb deze nieuwe versie opgestuurd naar de persoon en die is het nu (hopelijk) aan het testen. Ik heb de tip wat betreft het JScrollPane er ook in verwerkt, om andere problemen al op te vangen.

Verwijderd

Ach, of je nu de contentPane of een mainPanel een layoutmanager geeft maakt voor het verhaal niet zoveel uit. Ook niet of dat nu een BorderLayout of een BoxLayout is (overigens heb ik zelf nog nooit met een BoxLayout gewerkt, ben ook nog geen echte java-guru :) ).

Verwijderd

Topicstarter
Verwijderd schreef op maandag 17 januari 2005 @ 17:14:
Ach, of je nu de contentPane of een mainPanel een layoutmanager geeft maakt voor het verhaal niet zoveel uit. Ook niet of dat nu een BorderLayout of een BoxLayout is (overigens heb ik zelf nog nooit met een BoxLayout gewerkt, ben ook nog geen echte java-guru :) ).
De LayoutManager op zich maakt idd niet veel uit, maar voor de contentPane heb ik geen LayoutManager nodig omdat er toch maar 1 Component op zit. De nieuwe versie wordt nu getest en ik zal morgen wel horen of het nu beter gaat. Bedankt!

Verwijderd

Topicstarter
Ik heb net bericht gekregen en het werkt! Door een LayoutManager te gebruiken voor mainPanel is het probleem opgelost. Wat hebben we hier van geleerd? Altijd een LayoutManager gebruiken :) Bovendien heeft het JFrame nu een JScrollPane zodat het probleem met te lage resolutie niet kan voorkomen. Bedankt voor de hulp!

Verwijderd

Altijd leuk om te horen. In feite gebruikte je wel een layoutmanager, want volgens mij zet hij het standaard op flow-layout. Maargoed, je kunt inderdaad beter zelf in de hand houden wat betreft hoe de layout gemanaged wordt, al wil java soms nog rare dingen doen met die layoutmanagers :X

[ Voor 3% gewijzigd door Verwijderd op 18-01-2005 15:21 ]

Pagina: 1