Größe dynamisch ein JScrollPane?

Habe ich zwei Dateien. Man erweitert JFrame und anderen Erstreckt JPanel.
Wenn ich ändern Sie die Größe des Rahmens, ob es maximieren, ziehen, was auch immer, ich will die ScrollPane passt sich an die aktuelle Größe des Rahmens.
Es gibt mehr zu es, es gibt einen oberen Menüleiste und untere Leiste so gut, aber ich habe von denen, der Einfachheit halber.

Im wesentlichen, ich will, dass es funktioniert wie notepad.

Recht, jetzt benutze ich einen ComponentListener auf den frame aufruft, setSize-Methode in der anderen Klasse.
Die setSize-Methode ist einfach:

public void resize(int x, int y)
{
textA.setPreferredSize(new Dimension(x, y-50));

areaScrollPane.setPreferredSize(new Dimension(x,y-50));
}

auch für Referenz:

public void componentResized(ComponentEvent e)
 {
     textA.resize(panel.getWidth(),panel.getHeight());
  }

FYI, es erstreckt JPanel wegen der Art, wie ich es in den Rahmen:

panel = (JPanel) this.getContentPane();
panel.setLayout(new BorderLayout());
panel.add(textA, BorderLayout.CENTER);

also, was ist der beste Weg, dies zu tun?
Danke!

Edit: Hier der scrollpane-Datei. Es heißt textA in meiner main.

    public class TextArea extends JPanel
    {

    JTextArea textA=new JTextArea(500,500);

    JScrollPane areaScrollPane = new JScrollPane(textA);
    Toolkit toolkit =  Toolkit.getDefaultToolkit ();
    Dimension dim = toolkit.getScreenSize();
    Dimension dim2=(new Dimension((int)(dim.getWidth()),(int)(dim.getHeight()-120)));
    public TextArea()
    {
        //textA.setLineWrap(true);
        //textA.setWrapStyleWord(true);
        textA.setEditable(true);
        textA.setForeground(Color.WHITE);

        textA.setBackground(Color.DARK_GRAY);
        this.setFont(null);



        areaScrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
        areaScrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
        areaScrollPane.setMinimumSize(new Dimension(300,300));
        areaScrollPane.setSize(new Dimension(800,800));
        textA.setPreferredSize(dim2);
        areaScrollPane.setPreferredSize(dim2);
        areaScrollPane.setMaximumSize(dim2);
        add(areaScrollPane);
     }


    @Override
    public void resize(int x, int y)
    {
    textA.setPreferredSize(new Dimension(x, y-50));
    areaScrollPane.setPreferredSize(new Dimension(x,y-50));
    }

    }

und das wichtigste:

    public class JEdit extends JFrame implements ComponentListener

    {
    TextArea textA=new TextArea();
    JPanel panel;
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args)
    {

       JEdit run=new JEdit();

    }

    public JEdit()
    {

        setTitle("JEdit");
        setLayout(new BorderLayout());
        setSize(1100, 1000);

        this.setMinimumSize(new Dimension(100,100));
        //setBackground(Color.BLACK);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        try {
            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
        } catch (ClassNotFoundException ex) {
           System.out.println("error1");
        } catch (InstantiationException ex) {
            System.out.println("error2");
        } catch (IllegalAccessException ex) {
           System.out.println("error3");
        } catch (UnsupportedLookAndFeelException ex) {
            System.out.println("error4");
        }

         panel = (JPanel) this.getContentPane();
         panel.setLayout(new BorderLayout());
         //TopBar top=new TopBar();
        //PositionBar posB=new PositionBar();
         panel.add(textA, BorderLayout.CENTER);




       //add(top,BorderLayout.NORTH);
       //add(posB,BorderLayout.SOUTH);




        addComponentListener(this);
        setVisible(true);

    }



    public void componentResized(ComponentEvent e)
    {
         textA.resize(panel.getWidth(),panel.getHeight());
    }

    public void componentMoved(ComponentEvent e) {
    textA.resize(panel.getWidth(),panel.getHeight());
    }

    public void componentShown(ComponentEvent e) {
    textA.resize(panel.getWidth(),panel.getHeight());
    }

    public void componentHidden(ComponentEvent e) {
         textA.resize(panel.getWidth(),panel.getHeight());
    }



    }
  • Sie, wo gesagt, es gibt keine Notwendigkeit, um eine gewünschte Größe, oder verwenden Sie jede Art von Zuhörer. Sie denen auch gesagt, dass Sie das scrollpane direkt auf den Rahmen, doch Sie fügte hinzu, es auf ein JPanel. Machen Sie eine Anstrengung, um tatsächlich versuchen Sie die Vorschläge, wenn Sie Hilfe wollen!
InformationsquelleAutor Nyx | 2011-06-05
Schreibe einen Kommentar