Textfeld nicht rechteckig

kodela

Bekanntes Mitglied
Hallo,

ist es möglich, ein Textfeld zu erstellen, welches nicht rechteckig ist? Man könnte sagen, das Tesxtfeld sollte in der Grundform ein Rechteck sein, bei dem an einer Ecke ein Bild eingefügt ist, das natürlich nicht überschrieben werden darf.
 
Wie ich @kodela kenne, geht es um Swing. Da habe ich mal für einen ersten Ansatz was zusammengeschustert:
Java:
public class IconField extends JTextField {

    private final Icon icon;

    public IconField(Icon icon) {
        super(20);
        this.icon = icon;
        setBorder(getBorder());
    }

    @Override
    public void setBorder(Border border) {
        Border newBorder = border;
        if (icon != null) {
            int height = getPreferredSize().height;
            Border outerMargin = BorderFactory.createEmptyBorder(icon.getIconHeight() - height, 0, 0, 0);
            Border innerMargin = BorderFactory.createEmptyBorder(0, 0, 0, icon.getIconWidth());
            Border innerBorder = BorderFactory.createCompoundBorder(border, innerMargin);
            newBorder = BorderFactory.createCompoundBorder(outerMargin, innerBorder);
        }
        super.setBorder(newBorder);
    }

    @Override
    public void paint(Graphics g) {
        super.paint(g);
        if (icon != null) {
            icon.paintIcon(this, g, getWidth() - icon.getIconWidth(), 0);
        }
    }

    public static void main(String[] args) throws Exception {
        Image image = ImageIO.read(
                URI.create("https://upload.wikimedia.org/wikipedia/commons/thumb/d/dd/Achtung.svg/64px-Achtung.svg.png")
                        .toURL());
        Icon icon = new ImageIcon(image);

        SwingUtilities.invokeLater(() -> {
            JPanel panel = new JPanel(new GridLayout(0, 1));
            panel.add(new IconField(icon));
            panel.add(new IconField(icon));

            JFrame frame = new JFrame();
            frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
            frame.add(panel, BorderLayout.NORTH);
            frame.pack();
            frame.setVisible(true);
        });
    }
}
 
Hallo kodela. Ich will dir etwas zeigen. Dieses Programm besteht aus zwei Fenstern. Bei dem kleinen Fenster sind die Buttons an den Ecken diagonal zerschnitten.
Wenn das große Fenster verschoben wird, wird das kleine Fenster genauso verschoben.
Möchtest du den Quelltext sehen?
 

Anhänge

  • sdfdff.png
    sdfdff.png
    32,7 KB · Aufrufe: 0
@mihe7:
Danke für Deine Mühe, die Du Dir mit meiner schrägen Frage gemacht hast, aber es kam bei mir nicht viel raus, außer einem schwarzen Feld mit links oben einem kleinen weißem, kein Textfeld, das war es dann. Sieht von der Form ja so ähnlich aus, wie ich es mir vorgestellt hatte.

Mittlerweile habe ich einen Weg gefunden, für den kein unregelmäßiges Textfeld brauche.
 

Anhänge

  • Test.jpg
    Test.jpg
    16,6 KB · Aufrufe: 0
@krgewb:
Danke für das Angebot, wäre sicher interessant, wie Du das gemacht hast, aber derzeit geht es mir anderweitig etwas dick ein, so dass ich lieber darauf verzichte, den Code zu studieren.
 
@mihe7:
Danke für Deine Mühe, die Du Dir mit meiner schrägen Frage gemacht hast, aber es kam bei mir nicht viel raus, außer einem schwarzen Feld mit links oben einem kleinen weißem, kein Textfeld, das war es dann. Sieht von der Form ja so ähnlich aus, wie ich es mir vorgestellt hatte.

Mittlerweile habe ich einen Weg gefunden, für den kein unregelmäßiges Textfeld brauche.
Das ist seltsam. Bei mir sieht es so aus:

IconField.gif
 
@mihe7:

Ja, dass da irgend wie ein Achtungszeichen erscheinen sollte, habe ich dem Quellcode entnommen. Allerdings würde bei dieser Lösung, wenn sie denn bei mir funktionieren würde, das Textfeld selbst nicht beschnitten, nur eingeengt durch das Bild. Und nochmals ja, ich habe von einem Bild gesprochen, das da an einer Stelle eingefügt werden soll. Präzise hätte ich schreiben sollen, an einer Ecke soll ein Objekt gezeichnet werden.

Das ist jetzt aber egal, für die Darstellung auf dem Desktop habe ich die linke obere Ecke für die Darstellung des Hauptobjekts, darunter habe ich einige Anzeigen platziert und die ganze rechte Hälfte ist das Textfeld für Eintragungen durch den Anwender. Dieses Arrangement nutze ich auch für den Ausdruck ohne die Anzeige der Objekte unterhalb des Hauptobjekts. Hier kann der Anwender dann auch Eintragungen vornehmen.

Kurz zur Anwendung selbst: Im Hauptprojekt, einen quadratischen Bereich mit neun Feldern, wird je ein Buchstabe angezeigt, aus denen sollen möglichst viele Wörter gebildet und eingetragen werden. Der Buchstabe in der Mitte muss in jedem Wort vorkommen. Für jedes Wort gibt es entsprechend der Wortlänge Punkte. Für ein Wort mit allen neun Buchstaben gibt es 20 Punkte.
 

Zurück
Oben