[Java] JScollPane verwenden, JPanel scrollen

In NetBeans ist es rel. einfach einen Scrollbereich auf einem Formular zu definieren. Dazu zieht man sich im GUI-Designer ein JScrollPane auf das Formular und darauf dann ein JPanel (“pnl”).
Wenn das JPanel nun größer ist, als der Anzeigebereich des JScrollPane, werden entsprechend horizontale und vertikale Scrollbalken angezeigt und das JPanel kann gescrollt werden.

Wichtig ist, dass für das JScrollPane die entsprechenden Eigenschafts-Werte richtig eingestellt sind:

horizontalScrollBarPolicy == AS_NEEDED
vertiocalScrollBarPolicy == AS_NEEDED
Horizontal Size == default
Vertical Size == default
Horizontal Resizable == true
Vertical Resizable == true

Die Größe des JPanels lässt sich über folgenden Code variieren (minimumSize == [0,0] und maximumSize == [32767, 32767] beachten):

int w = 640;
int h = 480;

pnl.setPreferredSize(Dimension(w, h));

[Java] GroupBox erstellen (Swing)

Um in Java ein GUI-Element äquivalent zur GroupBox in Visual C# zu benutzen, kann man zur Designzeit einfach ein JPanel auf das Formular ziehen und dessen Eigenschaft “border” auf “TitledBorder” setzen.

Im Code sieht das Ganze dann so aus:

JPanel cbx = new JPanel();
cbx.setBorder(BorderFactory.createTitledBorder("Überschrift"));

[Java] JFrame onClose-Event behandeln (windowClosing)

public class Form1 extends javax.swing.JFrame
{
    public Form1()
    {
        initComponents();
        
        // windowClosing-Event anmelden        
        this.addWindowListener(new WindowAdapter()
        {
            public void windowClosing(WindowEvent e)
            {
                closeMainForm();
            }
        });
    }
    
    // wenn gewünscht ein Eventhandler für einen Menüpunkt "Schließen"
    private void exitMenuItemActionPerformed(java.awt.event.ActionEvent evt)
    {                                             
        closeMainForm();
    }                                            

    // Schließen-Funktion mit Abfrage
    private void closeMainForm()
    {
        if (JOptionPane.showConfirmDialog(null, "Fenster schließen?", "Frage", JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION)
        {
            System.exit(0);
        }
    }
    
    ...
    
}

[Java] SaveFileDialog anzeigen

import java.io.File;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import javax.swing.filechooser.FileNameExtensionFilter;

/**
 * shows a SaveFileDialog
 */
public class SaveFileDialog
{
    private ArrayList<String> _extensiontext = new ArrayList<>();
    private ArrayList<String> _extension = new ArrayList<>();

    /**
     * shows SaveFileDialog
     * @param path initial path, may be null
     * @return selected file or null if not overwritten
     */
    public File showDialog(String path)
    {
        File f = null;
        
        if (_extensiontext.size() > 0)
        {
            if ((path == null) || (path.length() == 0))
            {
                path = System.getProperty("user.home");
            } 

            final JFileChooser c = new JFileChooser(path);

            c.setDialogTitle("Save file");
            c.setDialogType(JFileChooser.SAVE_DIALOG); 
            c.setFileSelectionMode(JFileChooser.FILES_ONLY);

            // add filters
            for (int i = 0; i < _extensiontext.size(); i++)
            {
                FileNameExtensionFilter ff = new FileNameExtensionFilter(_extensiontext.get(i), _extension.get(i));
                c.setFileFilter(ff);
            }

            c.setVisible(true);

            // if "ok" or "yes" pressed
            if (c.showSaveDialog(null) == JFileChooser.APPROVE_OPTION)
            {
                f = c.getSelectedFile();

                String nameLower = f.getName().toLowerCase();
                String[] exts = ((FileNameExtensionFilter)c.getFileFilter()).getExtensions();
                boolean hascorrectext = false;

                // check if filename ends with filterextension
                for (String ext : exts)
                {
                    if (nameLower.endsWith('.' + ext.toLowerCase()))
                    {
                        hascorrectext = true;
                        break;
                    }
                }

                if (!hascorrectext)
                {
                    // if not, make new filename
                    f = new File(f.toString() + '.' + exts[0].toLowerCase());
                }

                boolean overwrite = true;

                // if file exists ask for overwriting
                if (f.exists())
                {
                    overwrite = (JOptionPane.showConfirmDialog(null, "File exists, overwrite?", "Question", JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION);
                }

                if (!overwrite)
                {
                    f = null;
                }
            }
            
            c.setVisible(false);
        }
        
        return f;
    }

    /**
     * adds FileNameExtensionFilter
     * @param text Filtertext, e.g. "Textfiles (*.txt)"
     * @param ext Filterextension, e.g. "txt"
     */
    public void addExtension(String text, String ext)
    {
        _extensiontext.add(text);
        _extension.add(ext);
    } 
}

Aufruf:

SaveFileDialog fd = new SaveFileDialog();
// add an extension
fd.addExtension("Textfiles (*.txt)", "txt");
// open dialog and get selected file
File f = fd.showDialog(null);

[Java] OpenFileDialog anzeigen

import java.io.File;
import javax.swing.JFileChooser;
import javax.swing.filechooser.FileNameExtensionFilter;

/**
 * shows a OpenFileDialog
 */
public class OpenFileDialog
{
    private ArrayList<String> _extensiontext = new ArrayList<>();
    private ArrayList<String> _extension = new ArrayList<>();

    /**
     * shows OpenFileDialog
     * @param path initial path, may be null
     * @return selected file
     */
    public File showDialog(String initialpath)
    {
        if ((initialpath == null) || (initialpath.length() == 0))
        {
            initialpath = System.getProperty("user.home");
        }

        final JFileChooser c = new JFileChooser(initialpath);
        
        c.setDialogTitle("Select file");
        c.setDialogType(JFileChooser.OPEN_DIALOG); 
        c.setFileSelectionMode(JFileChooser.FILES_ONLY);
        
        // add filters
        for (int i = 0; i < _extensiontext.size(); i++)
        {
            FileNameExtensionFilter ff = new FileNameExtensionFilter(_extensiontext.get(i), _extension.get(i));
            c.setFileFilter(ff);
        }

        // show dialog
        c.setVisible(true);
        
        File f = null;
        
        // if "ok" or "yes" pressed    
        if (c.showOpenDialog(null) == JFileChooser.APPROVE_OPTION)
        {
            // get selected file
            f = c.getSelectedFile();
        }
        
        // close dialog
        c.setVisible(false);

        return f;
    }

    /**
     * adds FileNameExtensionFilter
     * @param text Filtertext, e.g. "Textfiles (*.txt)"
     * @param ext Filterextension, e.g. "txt"
     */
    public void addExtension(String text, String ext)
    {
        _extensiontext.add(text);
        _extension.add(extension);
    }
}

Aufruf:

OpenFileDialog fd = new OpenFileDialog();
// add an extension
fd.addExtension("Textfiles (*.txt)", "txt");
// open dialog and get selected file
File f = fd.showDialog(null);

[Java] Float to String, String to Float

// Float -> String
String s1 = Float.toString(25.0f);
String s2 = String.valueOf(25.0f);

// formatierte Stringausgabe
// Variante 1:
// Dezimalseparator einstellen
DecimalFormatSymbols s = new DecimalFormatSymbols();
s.setDecimalSeparator('.');
// Anzahl Nachkommastellen                
DecimalFormat df = new DecimalFormat("0.00");
df.setDecimalFormatSymbols(s);
String s3 = df.format(25.453f);

// Variante 2:
DecimalFormat df = (DecimalFormat)DecimalFormat.getInstance(Locale.GERMAN);
df.applyPattern("0.00");
String s4 = df.format(25.453f);

// Variante 3:
String.format(Locale.GERMAN, "0.00", 25.453f);

// String -> Float
float f1 = Float.parseFloat("100.0");

// String -> Float ohne Locale
float f2 = NumberFormat.getInstance().parse("100.0").floatValue();
// String -> Float mit Locale
float f3 = NumberFormat.getInstance(Locale.GERMANY).parse("100.0").floatValue();

Weiterführende Links: