Domanda

Questo è più come un pacchetto di test / import. Inizieremo con la mia cartella di base a ... / javaf / test.java

Il mio obiettivo è quello di creare sottocategoria e creare una classe con un pulsante che posso importare a test.java quando ho bisogno di un pulsante. Mi sento come ho fatto nel modo giusto, so che il pulsante non fa nulla fin d'ora, ma voglio solo far funzionare il sistema e ampliare il codice da allora in poi. Così qui va - Questo è test.java

import paket.*;  // importing classes from subcategory paket!
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;


public class test {

    public test() {
        JFrame myFrame;
        JPanel myPanel;
        myFrame = new JFrame("Hello FramWorld");
        myPanel = new JPanel();

        // Here I want to add the object created in paket/myButts.java
        // The problem is how to make these two lines work.
        myButts myButton = new myButts();
        myPanel.add(myButton);


        myFrame.setVisible(true);
        myFrame.getContentPane().add(myPanel, BorderLayout.CENTER);
        myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        myFrame.pack(); 
    }

    public static void main(String args[]) {
        new test();
    }
}

E qui è il mio ... / javaf / paket / myButts.java

package paket; // Here is the package function (ought to work like a link)
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

// This class should only create a button.

public class myButts {  
    public myButts() {
        JButton myButt = new JButton();
    }
}

Ho compilato myButts.java senza errori. Ma poi compilo test.java e mi dà il seguente errore:

test.java:19: non riesce a trovare il simbolo simbolo: metodo add (paket.myButts) location: class javax.swing.JPanel         myPanel.add (myButton);

Grazie per la lettura, Z

È stato utile?

Soluzione

Penso che si desidera:

public class myButts extends JButton {  

}

Se si desidera aggiungere istanze della vostra classe direttamente a Swing controlli, deve estendersi a Swing o il tipo AWT (in questo caso JButton).

Prima, appena creato un JButton locale nel costruttore, che era inutilizzato e inaccessibile ovunque.

Come nota, è meglio cercare di seguire il href="http://java.sun.com/docs/codeconv/html/CodeConvTOC.doc.html" rel="nofollow noreferrer"> stile , in particolare le convenzioni denominazione . Classi sono raccomandati per essere il caso misto, ad esempio MyButton.

Altri suggerimenti

L'errore è:

test.java:19: cannot find symbol symbol : method add(paket.myButts) location: class javax.swing.JPanel myPanel.add(myButton);

Ciò significa che la classe JPanel non dispone di un metodo add che prende un parametro paket.myButts. Guardiamo la documentazione JPanel , per vedere quali metodi add che ha. Ci sono 5 metodi add ereditati da contenitore e uno da Component. Questo metodo , come la maggior parte di loro, si richiede di passare un oggetto Component. Questo richiede di passare un oggetto PopupMenu.

Così sembra che l'oggetto paket.myButts non è un componente o di un PopupMenu, e deve essere. Si potrebbe essere tentati di fare i vostri myButts estendono Component. Quindi uno sguardo al href="http://java.sun.com/j2se/1.5.0/docs/api/java/awt/Component.html" rel="nofollow noreferrer"> documentazione , per vedere che cosa sarò sempre. Si noti che ci sono diverse sottoclassi che sono già stati forniti:

Pulsante, Tela, Casella di controllo, Scelta, Container, Etichetta, Lista, Scrollbar, TextComponent

Ora, poiché si vuole realmente un pulsante, si può intuire che avrebbe senso per myButts di estendere Button. Che avrebbe funzionato, e si otterrebbe un awt.Button. Tuttavia, se si esplorare ulteriormente, alcune delle sottoclassi del contenitore sono il altalena classi, tra cui JButton. Ti consiglio di utilizzare queste classi a battente.

Una volta fatto questo, il tuo costruttore dovrebbe assumere questa forma:

public class myButts extends JButton {  
  public myButts() {
    super();
    // here put any myButts-specific construction code, such as:
    setText("Press me!");
  }
}

Per un'introduzione più generale all'utilizzo di componenti Swing, consiglio vivamente l'eccellente altalena esercitazione .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top