Icons in 2 Jlabels Director nebeneinander anzeigen

Diskutiere Icons in 2 Jlabels Director nebeneinander anzeigen im AWT, Swing, JavaFX & SWT Bereich.
VPChief

VPChief

Hallo,
Ich muss ein Programm für einen Freund schreiben. Dieses Programm soll ein Icon in ein Jlabel ausgeben, das klappt auch soweit, allerdings zeigt es meine Icons mit einem Abstand zwischeneinander an. Gibt es eine Möglichkeit diesen Abstand da raus zukriegen. Ich benutze dazu folgenden Code:

Jlabel lbl = new Jlabel();
lbl.setIcon(”src\\bild.png);

Sorry für den Titel das war die Autokorrektur.

Danke schon mal im Vorraus
Grüße VPChief
 
VPChief

VPChief

Ich habe garkein Layout drin. Ich bin mir nicht sicher was dort gemeint wurde: Könnte am LayoutManager liegen. Pack den Spaß mal in ein Panel mit FlowLayout. Ich will dass beide Icons direkt nebeneinander sind. Momentan (das war oben auch falsch ausgedrückt, Sorry) habe ich die Icons in zwei Labels gepackt.
image.png
Das rot eingekreiste soll raus.
Falls das gemeint wurde probier ich das mal,
danke
 
mihe7

mihe7

Hier mal ein Beispiel:
Java:
import java.awt.FlowLayout;
import java.net.*;
import javax.swing.*;

public class Test {
    private URL imageUrl;

    public Test(URL url) { imageUrl = url; }

    public void run() {
        FlowLayout layout = new FlowLayout(FlowLayout.LEFT, 0, 0);
        JPanel panel = new JPanel(layout);
        panel.add(new JLabel(new ImageIcon(imageUrl)));
        panel.add(new JLabel(new ImageIcon(imageUrl)));
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        frame.add(panel);
        frame.setSize(800, 600);
        frame.setVisible(true);
    }

    public static void main(String[] args) throws Exception {
        URL imageUrl = new URL("https://upload.wikimedia.org/wikipedia/commons/8/8a/Schaltfl%C3%A4che.png");
        SwingUtilities.invokeLater(() -> new Test(imageUrl).run());
    }
}
 
VPChief

VPChief

Sorry, falls die frage dumm ist aber bei mir kommen dann folgende Fehlermeldungen:

Return type for the method is missing
Test cannot be resolved to a type
 
VPChief

VPChief

Java:
package test;


import java.awt.FlowLayout;

import java.net.*;

import javax.swing.*;


public class test {

    

     private URL imageUrl;


        public Test(URL url) { imageUrl = url; }


        public void run() {

            FlowLayout layout = new FlowLayout(FlowLayout.LEFT, 0, 0);

            JPanel panel = new JPanel(layout);

            panel.add(new JLabel(new ImageIcon(imageUrl)));

            panel.add(new JLabel(new ImageIcon(imageUrl)));

            JFrame frame = new JFrame();

            frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

            frame.add(panel);

            frame.setSize(800, 600);

            frame.setVisible(true);

        }


        public static void main(String[] args) throws Exception {

            URL imageUrl = new URL("https://upload.wikimedia.org/wikipedia/commons/8/8a/Schaltfl%C3%A4che.png");

            SwingUtilities.invokeLater(() -> new Test(imageUrl).run());

        }



}
so habe ich es gemacht
 
VPChief

VPChief

Habs groß gemacht, jetzt funktionierts, danke. Wie übertrag ich das jetzt in mein eigenes Programm? Ich habs so gemacht doch es reagiert nicht
Java:
button3.addActionListener(new ActionListener() {

                    @Override
                    public void actionPerformed(ActionEvent arg0) {
                        FlowLayout layout = new FlowLayout(FlowLayout.LEFT, 0, 0);
                        JPanel panel = new JPanel(layout);
                        panel.add(new JLabel(new ImageIcon("src\\tex1.png")));
                        panel.add(new JLabel(new ImageIcon("src\\tex1.png")));
                       
                    }
                   
                   
                });
Ausserdem reagieren meine buttons jetzt erst wenn ich das fenster minimiere und wieder öffne
 
mihe7

mihe7

Was betreibst Du da?!? Wieso ist das jetzt in einem ActionListener? Außerdem müsstest Du das panel schon noch Deinem Frame hinzufügen, den Container validieren oder pack() auf dem Frame aufrufen.
 
VPChief

VPChief

Bin Anfänger, das sollte man dazu sagen . Das Programm soll, wie schon gesagt ein label ausgeben. Allerdings wenn der Benutzer den Button klickt.
danke, das hinzufügen habe ich vergessen. jetzt funktioniert das. wie kann ich es aber mache wenn ich das mit 2 unterschiedlichen Buttons machen will. Also wenn ich auf einen Button klicke, der wie auf dem Bild dann A ausgibt und einen mit B, ist das auch möglich?
 
mihe7

mihe7

Klar, jeder Button hat einen eigenen Listener. In der Regel fügt man aber bei einem Klick auf einen Button keine Komponenten mehr zum Frame hinzu. Vielmehr baut man den Frame einmal und ändert die Inhalte der Komponenten. Du kannst z. B. auf ein vorhandenes Label zugreifen und setIcon aufrufen. Wenn Du ein Beispiel brauchst, sag Bescheid, dann schreibe ich meinen Code oben um.
 
VPChief

VPChief

Also ich habe jetzt folgenden Code geschrieben
Java:
        JPanel content = new JPanel();
        
        JButton btn = new JButton();
        JLabel label = new JLabel();
        label.setIcon(new ImageIcon("src\\bild.png"));
        System.out.println();
        content.add(label);
        content.add(btn);
        a.setContentPane(content);
        
        btn.addActionListener(new ActionListener(){

            @Override
            public void actionPerformed(ActionEvent arg0) {
                label.setIcon(new ImageIcon ("src\\bild2.png"));
Allerdings löscht der jetzt bild und macht statdessen bild2 hin. Wie macht man das mit 2 Bildern. Hast dus so gemeint, dass man danach dem label ein neues Bild hinzufügt oder?
 
mihe7

mihe7

Füg einfach zwei Labels hinzu. Das Bild des einen setzt Du mit dem einen Button, das Bild des anderen mit dem anderen :)
 
VPChief

VPChief

Ähm, damit komme ich nicht ganz klar. Könntest du das vielleicht am Code zeigen?
 
mihe7

mihe7

Hier mal mit Text:
Java:
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.net.*;
import javax.swing.*;

public class Test {
    private JLabel firstLabel;
    private JLabel secondLabel;

    public void run() {
        firstLabel = new JLabel();
        secondLabel = new JLabel();
        JButton firstButton = new JButton("First");
        JButton secondButton = new JButton("Second");

        firstButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                firstLabel.setText("Erster");
            }
        });

        // hier in Kurzschreibweise (Faulheit)
        secondButton.addActionListener(e -> secondLabel.setText("Zweiter"));

        FlowLayout layout = new FlowLayout(FlowLayout.LEFT, 0, 0);
        JPanel panel = new JPanel(layout);
        panel.add(firstLabel);
        panel.add(secondLabel);
        panel.add(firstButton);
        panel.add(secondButton);

        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        frame.add(panel);
        frame.setSize(800, 600);
        frame.setVisible(true);
    }

    public static void main(String[] args) throws Exception {
        SwingUtilities.invokeLater(() -> new Test().run());
    }
}
 
VPChief

VPChief

Vielen Dank kann man das so machen, dass der Button auch zweimal reagieren kann?, allerdings reagiert der Button erst wenn ich das Fenster minimiere und wieder öffne.
 
VPChief

VPChief

Nochmal das gleiche, bei mir reagiert der immer blos einmal, also der sagt einmal erster einmal zweiter mehr geht nicht Ausserdem soll er auch zweiter als erstes Sagen, usw.
 
mihe7

mihe7

Bau eine Ausgabe (System.out.println) in den ActionListener ein und Du wirst sehen, dass die jedesmal aufgerufen wird, wenn Du einen Button drückst. Der Button setzt ja den Text und zwar immer wieder den gleichen - folglich stellst Du einfach nur keinen Unterschied fest, wenn Du auch 100x auf den Knopf drückst. Daher nochmals die Frage: was soll denn beim zweiten, dritten etc. Mal passieren?
 
Thema: 

Icons in 2 Jlabels Director nebeneinander anzeigen

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben