Frågor om hur man får in CardLayout i ett gränssnitt med GridBagLayout [JAVA]

Permalänk

Frågor om hur man får in CardLayout i ett gränssnitt med GridBagLayout [JAVA]

Hej igen allihopa.

Postade ett problem igår och fick bra hjälp då (mycket tacksam!). Nu har jag sprungit på ytterligare ett problem som jag inte riktigt vet hur jag ska lösa.

Jag har använt mig av GridBagLayout i mitt gränssnitt, men kom sedan på att det bästa vore att använda mig av en CardLayout på en del av gränsnittet. Nu är problemet att jag inte får det att fungera. Jag vill lägga till en CardLayout i den nedre delen av gränssnittet så att jag kan byta mellan två olika bilder samt en textarea när jag klickar på knapparna.

endast ett objekt ska visas åt gången. nu vet jag inte rikigt hur jag ska gå till väga för att få det här att fungera. Har provat ganska många olika sätt mn då jag inte är säker på hur det ska gå till så blir det inte riktigt rätt och jag vet inte riktigt hur jag ska göra detta.

Vore mycket tacksam om någon vänlig själ ville ge mig lite tips på hur detta ska gå till.

(OBS två koder)

//The GUI import java.awt.*; import javax.swing.*; import java.awt.event.*; public class ProjektInterface extends JFrame { public JPanel pane, ruta; public JMenuBar menubar; public JMenu meny1, meny2; public JMenuItem item1, item2, item3, item4; public JTextField txtbox; public JButton button1, button2, button3; public JScrollPane scrollpane; public JLabel bild1, bild2; void buildConstraints(GridBagConstraints gbc, int gx, int gy, int gw, int gh, int wx, int wy) { gbc.gridx = gx; gbc.gridy = gy; gbc.gridwidth = gw; gbc.gridheight = gh; gbc.weightx = wx; gbc.weighty = wy; } public ProjektInterface() { super("Projektet"); setSize(400, 300); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); GridBagLayout gridbag = new GridBagLayout(); GridBagConstraints constraints = new GridBagConstraints(); JPanel pane = new JPanel(); pane.setLayout(gridbag); setContentPane(pane); { JPanel menubar = new JPanel(); JMenuBar mbar = new JMenuBar(); meny1 = new JMenu("Arkiv"); meny2 = new JMenu("Info"); mbar.add(meny1); mbar.add(meny2); item1 = new JMenuItem("Avsluta"); item2 = new JMenuItem("Lägg till text"); item3 = new JMenuItem("Radera text"); item4 = new JMenuItem("Om"); meny1.add(item1); meny2.add(item2); meny2.add(item3); meny2.addSeparator(); meny2.add(item4); bild1 = new JLabel(new ImageIcon("wave.gif")); bild2 = new JLabel(new ImageIcon("Surf.jpg")); this.setJMenuBar(mbar); } buildConstraints(constraints, 0, 0, 3, 1, 0, 2); constraints.fill = GridBagConstraints.HORIZONTAL; constraints.anchor = GridBagConstraints.FIRST_LINE_START; JTextField txtbox = new JTextField(); gridbag.setConstraints(txtbox, constraints); pane.add(txtbox); buildConstraints(constraints, 0, 1, 1, 1, 48, 2); //A button that will switch to a picture constraints.fill = GridBagConstraints.NONE; constraints.anchor = GridBagConstraints.FIRST_LINE_END; constraints.insets = new Insets(1, 1, 1, 1); button1 = new JButton("Bild 1"); gridbag.setConstraints(button1, constraints); pane.add(button1); buildConstraints(constraints, 1, 1, 1, 1, 4, 0); //A button that will switch to another picture constraints.fill = GridBagConstraints.NONE; constraints.anchor = GridBagConstraints.PAGE_START; button2 = new JButton("Bild 2"); gridbag.setConstraints(button2, constraints); pane.add(button2); buildConstraints(constraints, 2, 1, 1, 1, 48, 0); //A button that will switch to a textarea constraints.fill = GridBagConstraints.NONE; constraints.anchor = GridBagConstraints.FIRST_LINE_START; button3 = new JButton("Textarea"); gridbag.setConstraints(button3, constraints); pane.add(button3); buildConstraints(constraints, 0, 2, 3, 1, 0, 96); //Here I want to have the picture/textarea constraints.fill = GridBagConstraints.BOTH; constraints.anchor = GridBagConstraints.FIRST_LINE_START; ruta = new JPanel(); gridbag.setConstraints(ruta, constraints); buildConstraints(constraints, 0, 2, 3, 1, 0, 96);//<==== //Första bilden ligger ovanpå ruta constraints.fill = GridBagConstraints.BOTH; constraints.anchor = GridBagConstraints.FIRST_LINE_START; gridbag.setConstraints(bild1, constraints); //här vill jag få in att bilden ändras pane.add(bild1); //Innehållspanel setContentPane(pane); setVisible(true); } } import java.awt.*; import javax.swing.*; import java.awt.event.*; class Projekt2 extends ProjektInterface implements ActionListener { public Projekt2() { item1.addActionListener(this); item2.addActionListener(this); item3.addActionListener(this); item4.addActionListener(this); button1.addActionListener(this); button2.addActionListener(this); button3.addActionListener(this); } public void actionPerformed(ActionEvent e) { Object o = e.getSource(); if (o == item1) System.exit(0); else if (o == item2) System.exit(0); else if (o == item3) ruta.setBackground(Color.GREEN); else if (o == item4) JOptionPane.showMessageDialog(null, " Detta program skrevs av: \n "); else if (o == button1) ruta.setBackground(Color.RED); else if (o == button2) ruta.setBackground(Color.BLUE); else if (o == button3) ruta.setBackground(Color.BLACK); } public static void main(String [] args) { Projekt2 test = new Projekt2(); } }

Permalänk
Medlem

Nu var det år sedan jag skrev något i java. Men något sånt här kanske?

... ruta = new JPanel(new CardLayout ()); ruta.add (bild1, BILD1); ruta.add (bild2, BILD2); ruta.add (new TextArea (), TEXT); ...

Mer att läsa på http://java.sun.com/docs/books/tutorial/uiswing/layout/card.h...

Visa signatur

Stolt användare av en ibook 300 MHz (dasslocket)