12. marts 2004 - 12:30Der er
35 kommentarer og 1 løsning
udskiftning og indsætning af JPanel
Hejsa
Jeg har et problem med udskiftning af JPanels. jeg skal have det 2 steder, og det ene sted kan jeg godt få det at virke, men det andet sted vil den bare ikke - eller jo det vil den godt, men så skal vinduet have været vist først fra det første sted. Mit metode kald er det samme begge steder, så det virker mystisk.
Det ene sted (som virker) er fra en JTabbedPane hvor den lytter på om jeg skifter faneblad. Den anden der ikke virker er fra en knap.
I stedet for at tilføje og fjerne JPanels i en kørende app, bør du egentlig lægge stilen om og anvende CardLayout i stedet for, med mindre de paneler du skifter i mellem skal have forskellig størrelse, prøv et teste nedenstående eksempel
import java.awt.*; public class Exp476419 extends javax.swing.JFrame {
public Exp476419() { initComponents(); setSize(400,400); }
private void initComponents() { jPanel2 = new javax.swing.JPanel(); jPanel3 = new javax.swing.JPanel(); jPanel4 = new javax.swing.JPanel(); jPanel5 = new javax.swing.JPanel(); jMenuBar1 = new javax.swing.JMenuBar(); jMenu1 = new javax.swing.JMenu(); jMenuItem1 = new javax.swing.JMenuItem(); jMenuItem2 = new javax.swing.JMenuItem(); jMenuItem3 = new javax.swing.JMenuItem();
jeg har aldrig arbejdet med cardLayout, det jeg bruger her er tablelayout og synes eller at det virker fint. men kunne jo godt være at man skulle prøve det.
CardLayout fungerer på samme måde som et spil kort, hvor alle kort har nøjagtig samme størrelse og du kan tage et hvilket som helst kort i bunken og lægge det øverst
Du kan resize, men alle kort vil hele tiden have samme størrelse
D.v.s i din JTabbedPane kunne du smide et JPanel og sætte Layout = CardLayout så fylder du dit Layout op med de JPanels der nu skal være, så kan du i stedet for at fjerne og tilføje paneler, bare skifte imellem dem, hvilket giver roligere billede.
AppAccelerator(tm) 1.2.010 for Java (JDK 1.2), x86 version. Copyright (c) 1997-1999 Inprise Corporation. All Rights Reserved. java.lang.reflect.InvocationTargetException: java.lang.VerifyError: (class: Kildekode/GUI/Main, method: <init> signature: ()V) Incompatible argument to function
at Kildekode.GUI.Start.main(Start.java:63) at java.lang.reflect.Method.invoke(Native Method) at com.borland.jbuilder.util.BootStrap.invokeMain(Unknown Source) at com.borland.jbuilder.util.BootStrap.main(Unknown Source)
går jeg så ind og kigger på filen Start på linie 63 finder jeg min look and feel. udkommentere jeg den så fjrener den så den linie men det virker stadig ikke
Hvordan ser din main metode ud, det må være der vi skal begynde at lede efter løsningen ?
Selv om jeg aldrig selv har brugt/anvendt TableLayout (bruger altid GridBagLayout) så mener jeg ikke der er problemer i Layoutet, udfra det jeg har skimmet i dokumentationen omkring TableLayout
public class Main extends JFrame{ private static Main instans; private Container c; private JSeparator Svandret, jSeparator1;
// Singleton public static Main hentInstans(){ if (instans == null) instans = new Main(); return instans; }
private Main(){ double m = 5; double p = TableLayout.PREFERRED; double f = TableLayout.FILL; double stoerrelse[][] = {{ m, 200, m, m, f, m, m}, {m, f, 2, p, m}};
c = this.getContentPane(); c.setLayout(new TableLayout(stoerrelse));
setTitle("Electric It - Salgs- og lagersystem"); setIconImage(new ImageIcon("ikoner\\fortryd2.gif").getImage()); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent evt){ exitForm(evt); } });
Sorry - skulle lige se noget advokat sjov i fjerneren.
Jeg ville nok lade fanerne ligge horizontalt og putte tabellen ind i fanen, for ligesom at skabe en helhed omkring hver fane, altså i fanen salg ligger alt som vedrører salg, men det ser jo nydeligt ud, så lad os se om vi ikke kan få det til at virke.
Jeg går i gang med et eksempel, vender forhåbentlig tilbage i aften!
Så er der et eksempel, jeg har prøvet at holde det simpelt og i din byggestil, men er egentlig ikke klar over om det helt er lykkedes, under alle omstændigher er det her nok mit sidste bud på en løsning - er faktisk flad nu!
Prøv at klikke på fanebladene og se hvordan billedet skifter i højre side. Jeg har vist kun tilbage at sige - - pøj, pøj med det.
public class Saxtus extends javax.swing.JFrame { public Saxtus() { initComponents(); setSize(500,500); tabbedPane.setPreferredSize(new java.awt.Dimension(200,500)); }
private void initComponents() {
cardLayout = new MyCardLayout(); layout = (java.awt.CardLayout)cardLayout.getLayout(); tabbedPane = new TabbedPanePanel(layout, cardLayout);
class TabbedPanePanel extends javax.swing.JPanel { public TabbedPanePanel(java.awt.CardLayout card, MyCardLayout myLayout) { this.card = card; this.myLayout = myLayout; initComponents(); }
private void initComponents() { jTabbedPane1 = new javax.swing.JTabbedPane(); pane1 = new javax.swing.JTabbedPane(); pane2 = new javax.swing.JTabbedPane(); pane3 = new javax.swing.JTabbedPane();
// Panelet som indeholder CardLayout class MyCardLayout extends javax.swing.JPanel { public MyCardLayout() { myPanel1 = new MyPanel(java.awt.Color.BLUE); myPanel2 = new MyPanel(java.awt.Color.GREEN); myPanel3 = new MyPanel(java.awt.Color.RED);
//De 3 paneler som ligger i klassen MyCardLayout class MyPanel extends javax.swing.JPanel { public MyPanel(java.awt.Color color) { setBackground(color); } }
Lidt skidt det ikke var mere. du får alligevel lidt point fordi du var så aktiv med at hjælpe mig :)
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.