Benbjo Skrevet 8. april 2008 Del Skrevet 8. april 2008 Har et lite problem jeg trenger hjelp til. Legger ikke ut koden riktig enda da en egentlig ikke trengs for å løse problemet. Problemet har seg slik at jeg har en abstract klasse (extends JFrame) som har en indre static klasse (extends JPanel). Inne i den indre klassen har jeg en metode med en parameter. Denne skal jeg måtte kalle fra en helt annen klasse slik at jeg kan sende med parameter variabelen. Hvordan gjør jeg dette? Får som sagt feilen som skrevet i topic "Cannot make a static refrence to the non-static method tegnbrett(Sudokubrett) from the type SudokuGUI.Sudokupanel Det jeg altså gjør er SudokuGUI.SudokuPanel.tegnBrett(brettet); når jeg kaller på metoden. Hjelp? Lenke til kommentar
pgdx Skrevet 8. april 2008 Del Skrevet 8. april 2008 Synes tittelen din sier seg selv, jeg. Lenke til kommentar
pgdx Skrevet 8. april 2008 Del Skrevet 8. april 2008 i.e. SudokuPanel.tegnBrett(brettet) er ikke static. Jeg kan selvsagt ta feil, legg i så tilfelle kildekoden din ut her så vi kan se hva som er gale. Eller bruke pastebin. Lenke til kommentar
Benbjo Skrevet 8. april 2008 Forfatter Del Skrevet 8. april 2008 (endret) Glem det. Fant ut hva som var feil. Opplagt i grunn... Topic kan stenges Endret 9. april 2008 av Benbjo Lenke til kommentar
NevroMance Skrevet 9. april 2008 Del Skrevet 9. april 2008 Eller du kan komme med svaret i tilfelle flere kommer og lurer på samme problemet. På den måten kan de bare søke istedenfor å lage en helt ny tråd. Lenke til kommentar
Iyon Skrevet 9. april 2008 Del Skrevet 9. april 2008 Ikke noe vits i å være flau over sin egen kode, hvis det er derfor du ikke legger den ut Lærer masse av å la andre se koden din! Lenke til kommentar
Benbjo Skrevet 9. april 2008 Forfatter Del Skrevet 9. april 2008 (endret) Er klar over det. Grunnen til at jeg ikke legger den ut er at det er masse kode som ikke er relevant for probelemet. Hadde lagt ut koden før jeg endret posten min. Løsningen var enkel. Man kan jo ikke lage nye objekter av en abstract klasse, så jeg måtte lage en subklasse som extender den abstracte klassen. Denne subklassen laget en ramme for et GUI (JFrame). I den abstrakte klassen er det dessuten en underklasse som er static. Denne skal fungere som et JPanel. Jeg sier new JPanel i subklassen til den ytre klassen, og sender dermed denne som parameter til en annen klasse slik at jeg får tilgang til static klassen og får dermed tilgang til den Vanskelig forklart kanskje. Legger ut koden i tillegg straks. abstract class SudokuGUI extends JFrame { //dette er utsyn protected SudokuBuffer buffer; protected SudokuArbeider arbeider; /**The GUI needs a buffer to read solutions from. * * @param buffer */ public SudokuGUI(SudokuBuffer buffer) { this.buffer = buffer; buffer.setUtsyn(this); } SudokuGUI(){ } /**Sets the "next" button to be active, i.e. receptive to user interaction. */ public abstract void settAktiv(); /**Sets the "next" button to be inactive, i.e. not receptive to user interaction. */ public abstract void settInaktiv(); /**Draws the Sudoku board represented by a <tt>char[][]</tt> in a JPanel. * * @author jonmv */ protected static class SudokuPanel extends JPanel { //static private static final long serialVersionUID = -1; //Nothing to care about... private static final int DEFAULT_SIZE = 40; //Default square size. private int dim, hoyde, bredde; //Dimentions of current board. private JLabel[][] ruter; //The labels containing the board values. protected SudokuPanel() { settOppBrett(9, 3, 3); setDoubleBuffered(true); setBorder(BorderFactory.createLineBorder(Color.BLACK, 3)); } /**Draws the Sudoku puzzle solution represented by the <tt>char[][]</tt> in the Sudokubrett parameter. * * @param brett */ protected void tegnBrett(Sudokubrett brett) { if (brett.hoyde != hoyde || brett.bredde != bredde) { settOppBrett(brett.dimensjon, brett.hoyde, brett.bredde); } for (int i = 0; i < dim; i++) for (int j = 0; j < dim; j++) { ruter[i][j].setText(brett.brett[i][j] + ""); } } /**Rearranges the panel with inner panels and labels with the correct layout. * * @param dim * @param hoyde * @param bredde */ private void settOppBrett(int dim, int hoyde, int bredde) { removeAll(); this.dim = dim; this.hoyde = hoyde; this.bredde = bredde; this.setLayout(new GridLayout(bredde, hoyde)); JPanel[][] bokser = new JPanel[bredde][hoyde]; for (int i = 0; i < bredde; i++) for (int j = 0; j < hoyde; j++) { JPanel boks = new JPanel(); boks.setBorder(BorderFactory.createLineBorder(Color.BLACK, 1)); boks.setLayout(new GridLayout(hoyde, bredde)); boks.setOpaque(false); bokser[i][j] = boks; add(boks); } ruter = new JLabel[dim][dim]; for (int i = 0; i < dim; i++) for (int j = 0; j < dim; j++) { JLabel label = new JLabel(); label.setHorizontalAlignment(SwingConstants.CENTER); label.setBorder(BorderFactory.createLineBorder(Color.BLACK)); label.setPreferredSize(new Dimension(DEFAULT_SIZE, DEFAULT_SIZE)); ruter[i][j] = label; bokser[i / hoyde][j / bredde].add(label); } } } } class Brukergrensesnittet extends SudokuGUI { private static final long serialVersionUID = -1; JButton startKnapp;; JButton stoppKnapp; JButton nesteKnapp; public void settAktiv(){ } public void settInaktiv(){ } Brukergrensesnittet() { setTitle("Sudokuhjelper"); SudokuPanel panel = new SudokuPanel(); startKnapp = new JButton("Start"); stoppKnapp = new JButton("Stopp"); nesteKnapp = new JButton("Neste løsning"); Container lerret = getContentPane(); lerret.setLayout(new BorderLayout()); lerret.add(panel, BorderLayout.NORTH); lerret.add(startKnapp, BorderLayout.WEST); lerret.add(stoppKnapp, BorderLayout.CENTER); lerret.add(nesteKnapp, BorderLayout.EAST); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); pack(); setVisible(true); ActionListener knappelytter = new Lytter(panel); startKnapp.addActionListener(knappelytter); stoppKnapp.addActionListener(knappelytter); nesteKnapp.addActionListener(knappelytter); } class Lytter implements ActionListener { SudokuPanel panel; Lytter (SudokuPanel panel) { this.panel = panel; } public void actionPerformed(ActionEvent e){ if (e.getSource() == startKnapp) { JFileChooser chooser = new JFileChooser(); int valg = chooser.showOpenDialog(null); if(valg == JFileChooser.APPROVE_OPTION) { String filnavn = chooser.getSelectedFile().getName(); System.out.println("Du har valgt å åpne fila: " + chooser.getSelectedFile().getName()); try { Sudokubrett brettet = Sudokubrett.lesFraFil(filnavn); //returnerer et sudokubrett panel.tegnBrett(brettet); } catch (FileNotFoundException f){ } catch (IOException f){ } } } else if (e.getSource() == stoppKnapp){ System.out.println("Programmet skal stoppe å finne løsninger"); } else if (e.getSource() == nesteKnapp){ System.out.println("Programmet finner neste løsningen"); } } } } Endret 9. april 2008 av Benbjo Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå