26. juli 2002 - 12:35Der er
6 kommentarer og 1 løsning
JPanel på JTabbedPane
Den vedlagte kode (5 klasser) viser, ekstremt simplificeret, mit program der skal kunne vise forskelligt definerede Labels på forskellige faner.
Mit problem er at mine labels ikke bliver vist med hvid baggrund, selv om jeg har sat baggrundsfarven til hvid. Problemet kan delvis løses ved at lade class Label extende Canvas, men det giver et problem med at labels på fanerne ikke bliver vist ordentligt, (formentligt pga blanding af Swing og awt), og står oven i hinanden indtil der skiftes fane første gang.
Hvordan finder jeg en løsning der giver mig en hvid baggrund på Labels og samtidig giver et pænt opstartsbillede, uden at skifte fane først??
Prøv at kompilere koden og se problemet med egne øjne. Jeg arbejder i JDK 1.3.
I lang tid har samarbejdsbranchen fokuseret på at forbedre enhedsfunktioner – bedre kameraer, klarere lyd og smartere software. Men den virkelige forvandling handler ikke om funktioner.
Jeg har kigget på din kode og kørt den. Det eneste jeg kan se der giver problemer er dine setBounds metodekald. Er de virkelig nødvendige? Det ser ud til at uden dem er der ikke problemer (jeg har sammenlignet med min egen brug a JTabbedPane).
Jeg bliver nød til at kunne definere forskellige størrelser på de labels der skal vises på hver fane. De skal vise helt nøjagtigt hvad brugeren får udskrevet på sine labels, på den givne label-størrelse.
Jeg er ikke helt sikker på at jeg forstår præcis hvad du vil, men her er et eksempel med JTabbedPane der i to forskellige tabs viser forskellige billeder i JLabels, du kan bruge navnene på nogle billedfiler du har for at teste det; sørg for at billederne har forskellige dimensioner. import javax.swing.*; import java.awt.image.*; public class ShowLabels extends JFrame { public ShowLabels() { JTabbedPane pane = new JTabbedPane(); JPanel panel1 = new Panel1(); JPanel panel2 = new Panel2(); pane.add( panel2 ); pane.add( panel1 ); getContentPane().add( pane ); setSize( 500, 500 ); } private static class Panel1 extends JPanel { public Panel1() { add( new JLabel( new ImageIcon( "ik.png" ) ) ); } } private static class Panel2 extends JPanel { public Panel2() { add( new JLabel( new ImageIcon( "ikeda2.png" ) ) ); } } public static void main( String[] args ) { JFrame frame = new ShowLabels(); frame.show(); } }
Til carstenknudsen >> Undskyld, det er mig der ikke udtrykker mig klart nok.. Med labels mener jeg rent faktisk labels til en printer, og det er meningen at den label der skal printes ud, opbygges af brugeren på den enkelte fane, på det definerede label-område (kan være Avery-label), så brugeren får en slags WYSIWYG (tilnærmet ihvertfald). Din kode er helt fin, og jeg beklager hvis min beskrivelse har givet dig unødigt arbejde. Jeg havde slet ikke forestillet mig at det kunne forveksles med JLabel, men det kan det selvfølgelig. Min fejl..
Jeg er godt klar over at det ikke er en JLabel du er interessert i, det jeg viste var at hvis du kommer dit billede ind i en JLabel kan du vise billede uden de problemer du har når du bruger setBounds metoden; den tror jeg er synderen. I en JLabel kan du sætte størrelsen manuelt og tegne hvor du har lyst, det kan du iøvrigt også i et JPanel og mange andre komponenter. Du kan sagtens offset'e din tegning og få det som du vil. Det er snarere det du skal gøre end sætte bounds eksplicit.
carstenknudsen >> Jeg er enig med dig i at det nok er setBounds(..) der er synderen, ihvertfald når jeg extender fra JPanel, men det er ikke det problem jeg får ved at extende fra Canvas. Der vises områderne fra de forskellige faner oven i hinanden indtil jeg skifter fane første gang, derefter virker alt som jeg gerne vil have det til. Label-området skal være hvidt i den størrelse der passer til den enkelte label, og brugeren kan tegne og skrive i området som det passe ham, derfor er det nødvendigt for mig med et afgrænset hvidt område. Jeg er ikke helt klar over hvad du mener med at jeg ikke skal afgrænse eksplicit, eller jeg kan sætte størrelsen manuelt.
Er du eventuelt interesseret i at få hele koden, selv om det endnu er en grov prototype, så kan du måske bedre se mit problem??
Jeg har selv løst problemet på en lidt u-fin måde, men det virker for mig, og jeg kan ikke bruge mere tid på at finde den forkromede løsning.
Jeg lod paint-metoden i min Label-klasse køre metoden fillRect(.....) på det definerede område, med setColor(..) sat til hvid inden jeg begyndte min tegning og skrivning på den enkelte label. Ikke helt kønt, men det virker, og jeg kan bruge JPanel i stedet for Canvas, hvilket er det bedste (Swing/awt).......
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.