14. december 2002 - 15:57
Der er
6 kommentarer
kontrol af GUI frames
for at få et godt design, vil jeg have en kontrolklasse, der styrer de GUI'er jeg har. Har nogen eksempler på fx. hvordan koden ser ud, hvis en GUI skal åbne en anden??(via kontrolklassen)
Annonceindlæg fra Academic Work Denmark A/S
14. december 2002 - 18:35
#1
Jeg kan ha' misforstået dig, men hvis du har en GUI-klasse med en constructor metode alla: public klassenavn() { setSize(250,250); setTitle("klassetitel"); setVisible(true); } så bliver den automatisk åbnet når du i kontrol-klassen skriver: klassenavn GUI = new klassenavn();
14. december 2002 - 18:55
#2
det er ikke lige det jeg er ude efter!men tak hvis du har fx 3 gui'er og ved at trykke på en button i gui1 skal gui2 åbnes. men det skal forgå via en fx handler-klasse, der styrer gui'erne
14. december 2002 - 19:36
#3
Ok. Hvis du bare har et par vinduet kan dette gøre ret nemt. Jeg har lavet et lille eksempel: --- run.java --- public class run { public static void main(String[] args) { handler h = new handler(); } } -------------- --- handler.java --- public class handler { gui1 g1; gui2 g2 = null; public handler() { g1 = new gui1(this); g2 = new gui2(); } public void openGUI2() { if (g2 != null) { g2.open(); } } } -------------- --- gui1.java --- import java.awt.*; import java.awt.event.*; import javax.swing.*; public class gui1 extends JFrame implements MouseListener { handler h; public gui1(handler hand) { h = hand; setSize(250,250); setTitle("gui1"); setVisible(true); addMouseListener(this); } public void mouseClicked(MouseEvent e) { h.openGUI2(); } public void mousePressed(MouseEvent e) {} public void mouseReleased(MouseEvent e) {} public void mouseEntered(MouseEvent e) {} public void mouseExited(MouseEvent e) {} } -------------- --- gui2.java --- import java.awt.*; import javax.swing.*; public class gui2 extends JFrame { public gui2() { setSize(250,250); setTitle("gui2"); } public void open() { setVisible(true); } } -------------- Er det noget i den retning?
r9
Nybegynder
14. december 2002 - 19:53
#4
Du kan jo lave en controller klasser som modtager alle events, og bestemmer hvad du skal gøre. Herunder er 2 klasser, som viser et simpelt eksempel: import javax.swing.*; import java.awt.*; import java.awt.event.*; class Gui extends JFrame { public Gui( String title) { super( title ); getContentPane().setLayout( new GridLayout( 2, 1 ) ); JPanel numbers = new JPanel(); numbers.setLayout( new FlowLayout() ); JPanel buttons = new JPanel(); buttons.setLayout( new FlowLayout() ); JButton knap1 = new JButton("knap1"); knap1.setActionCommand("knap1"); new Controller(knap1); buttons.add(knap1); JButton knap2 = new JButton("knap2"); knap2.setActionCommand("knap2"); new Controller(knap2); buttons.add(knap2); getContentPane().add( numbers ); getContentPane().add( buttons ); addWindowListener( new ApplicationTerminator() ); pack(); setVisible( true ); } } class ApplicationTerminator extends WindowAdapter { public void windowClosing( WindowEvent e ) { System.exit(0); } } import javax.swing.*; import java.awt.event.*; public class Controller implements ActionListener { protected JButton button; public Controller( JButton button) { this.button = button; button.addActionListener(this); } public void actionPerformed( ActionEvent e ) { if (e.getActionCommand().equalsIgnoreCase("knap1")){ System.out.println("Du har trykker på knap1"); } else if (e.getActionCommand().equalsIgnoreCase("knap2")){ System.out.println("Du har trykker på knap2"); } } }
16. december 2002 - 01:23
#5
En anden god ide er at lade dine gui klasser være Singletons og så bare kalde dem statisk fra din styreklasse. Eksempel: import java.awt.*; import javax.swing.*; public class TestFrame extends JFrame { private static TestFrame instance = null; private Container contentPane; private JTextArea area; protected TestFrame() { contentPane = getContentPane(); setTitle("test"); setSize(300,300); area = new JTextArea(); area.setEditable(false); contentPane.add(area, BorderLayout.CENTER); } public static TestFrame getInstance() { if( instance == null ) instance = new TestFrame(); return instance; } public void setText(String text) { area.append(text+"\n"); } } class Test { public static void main(String[] args) { TestFrame.getInstance().show(); for( int i = 0; i < 3; i++ ) { try { Thread.sleep(1000); } catch( InterruptedException ie ) { System.out.println (ie); } TestFrame.getInstance().setText(""+i); } } }
16. december 2002 - 01:24
#6
Singletons er perfekte til at holde koblingen lav.. det er essentielt i godt design. Jeg bruger selv Singletons i stor stil når jeg laver gui.
Kurser inden for grundlæggende programmering