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 ?
Staat de lookAndFeel van Swing op het DefaultOSLookAndFeel of op het swing MetalLookAndFeel ?
edit:
gebruiken jullie beide hetzelfde OS?
gebruiken jullie beide hetzelfde OS?
[ Voor 21% gewijzigd door Verwijderd op 13-01-2005 14:45 ]
Voor het JFrame gebruik ik geen LayoutManager. In het JFrame heb ik alleen de aanroep
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
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
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.
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.
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:
Je andere 2 tips zal ik gelijk eens proberen, bedankt!
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!
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:
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.
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 ]
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.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.
Volgens mij loop je weer achter want ik heb het over Swing, jij hebt het over AWT
[ 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.
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 omschrevenVerwijderd 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.
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
).
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 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).
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
[ Voor 3% gewijzigd door Verwijderd op 18-01-2005 15:21 ]
Pagina: 1