Darstellungsfehler

Status
Nicht offen für weitere Antworten.

Reality

Top Contributor
Hi,
ich habe einen JSlider programmiert. Mit ihm bestimme ich den Alpha-Wert eines Rot-Tons das in einem JPanel angezeigt wird.
Der JPanel erscheint jedoch neben dem JSlider und gerade mal 5*5 Pixel groß, obwohl ich 30*30 Pixel eingestellt habe.

Ich kenne mich mit LayoutManagern wenig aus und habe daher den Standard benutzt (Flow-Layout?), das automatisch Components einrückt, wenn sie auf derselben Zeile kein Platz mehr haben, nur funktioniert es eben in diesem Fall nicht.

Könnt ihr das mal schnell kompilieren?

Code:
import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;

public class Main extends JFrame implements ActionListener, ChangeListener{

    //Breite und Höhe des Frames
    static private final int width = 280;
    static private final int height = 300;

    //In Prozent umrechnen
    private int alphaIntensity = (100 * 100) / 255;
    //Von Prozent in einen int-Wert umrechnen
    private Color alphaColor = new Color(255, 0, 0, (alphaIntensity * 255) / 100);

    JPanel contentPane = new JPanel();
    JLabel alphaText = new JLabel("Deckungskraft (Leistungseinbußen)");
    JSlider alpha = new JSlider(0, 100);
    JPanel alphaDemo = new JPanel();
    JCheckBox chRender = new JCheckBox("Text-Antialasiang (Leistungseinbußen)", true);
    JButton btSave = new JButton("Speichern");

    Main(){
        super("Konfiguration");
        alphaDemo.setBackground(alphaColor);
        alphaDemo.setSize(30, 30);

        alpha.setValue(alphaIntensity);
        alpha.setMinorTickSpacing(5);
        alpha.setMajorTickSpacing(10);
        alpha.setPaintTicks(true);
        alpha.setPaintLabels(true);
        alpha.addChangeListener(this);

        btSave.addActionListener(this);
        
        contentPane.add(alphaText);
        contentPane.add(alpha);
        contentPane.add(alphaDemo);
        contentPane.add(chRender);
        contentPane.add(btSave);

        setContentPane(contentPane);
    }

    public static void main(String[] args) {
        Main window = new Main();

        //window.setResizable(false);
        window.setLocation(window.calculateCenterPosition());
        window.setSize(width, height);
        window.setVisible(true);
        window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    //Frame in der Mitte positionieren
    Point calculateCenterPosition(){
        GraphicsEnvironment environment = GraphicsEnvironment.getLocalGraphicsEnvironment();
        GraphicsDevice device = environment.getDefaultScreenDevice();

        DisplayMode display = device.getDisplayMode();

        int x = (display.getWidth() - width) / 2;
        int y = (display.getHeight() - height) / 2;

        return new Point(x, y);
    }

    public void actionPerformed(ActionEvent e){

    }

    public void stateChanged(ChangeEvent e){
        //Von Prozent wieder in einen int-Wert umrechnen
        alphaIntensity = (alpha.getValue() * 255) / 100;

        alphaColor = new Color(255, 0, 0, alphaIntensity);
        alphaDemo.setBackground(alphaColor);
    }
}

Liebe Grüße
Reality
 

L-ectron-X

Gesperrter Benutzer
So geht's. :wink:

Code:
import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;

public class Main extends JFrame implements ActionListener, ChangeListener{

    //In Prozent umrechnen
    private int alphaIntensity = (100 * 100) / 255;
    //Von Prozent in einen int-Wert umrechnen
    private Color alphaColor = new Color(255, 0, 0, (alphaIntensity * 255) / 100);

    private JPanel contentPane = new JPanel();
    private JLabel alphaText = new JLabel("Deckungskraft (Leistungseinbußen)");
    private JSlider alpha = new JSlider(0, 100);
    private JPanel alphaDemo = new JPanel();
    private JCheckBox chRender = new JCheckBox("Text-Antialiasing (Leistungseinbußen)", true);
    private JButton btSave = new JButton("Speichern");

    public Main() {
        super("Konfiguration");
        //setResizable(false);
        setSize(280, 300);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        alphaDemo.setBackground(alphaColor);
        alphaDemo.setPreferredSize(new Dimension(30, 30));
        alpha.setValue(alphaIntensity);
        alpha.setMinorTickSpacing(5);
        alpha.setMajorTickSpacing(10);
        alpha.setPaintTicks(true);
        alpha.setPaintLabels(true);
        alpha.addChangeListener(this);

        btSave.addActionListener(this);

        contentPane.add(alphaText);
        contentPane.add(alpha);
        contentPane.add(alphaDemo);
        contentPane.add(chRender);
        contentPane.add(btSave);

        setContentPane(contentPane);
    }

    public void actionPerformed(ActionEvent e){

    }

    public void stateChanged(ChangeEvent e){
        //Von Prozent wieder in einen int-Wert umrechnen
        alphaIntensity = (alpha.getValue() * 255) / 100;

        alphaColor = new Color(255, 0, 0, alphaIntensity);
        alphaDemo.setBackground(alphaColor);
    }

    public static void main(String[] args) {
        new Main().setVisible(true);
    }
}
 

Reality

Top Contributor
Hier bitte, hat sich kaum etwas verändert.

Code:
import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;

public class Main extends JFrame implements ActionListener, ChangeListener{

    //Breite und Höhe des Frames
    static private final int width = 265;
    static private final int height = 300;

    //In Prozent umrechnen
    private int alphaIntensity = (100 * 100) / 255;
    //Von Prozent in einen int-Wert umrechnen
    private Color alphaColor = new Color(255, 0, 0, (alphaIntensity * 255) / 100);
    
    private final String bitDepth[] = {"24", "32"};
    
    JPanel contentPane = new JPanel();
    JLabel alphaText = new JLabel("Deckungskraft der Textboxen");
    JLabel losses = new JLabel("(Leistungseinbußen bei niedriger Deckkraft)");
    JSlider alpha = new JSlider(0, 100);
    JPanel alphaDemo = new JPanel();
    
    JCheckBox chRender = new JCheckBox("Text-Antialasiang (Leistungseinbußen)", true);
  
    JLabel bitDepthText = new JLabel("Bit-Tiefe auswählen");
    JComboBox bitDepthChooser = new JComboBox(bitDepth);
    
    JButton btSave = new JButton("Speichern");

    Main(){
        super("Konfiguration");
        alphaDemo.setBackground(alphaColor);
        alphaDemo.setPreferredSize(new Dimension(50, 50));

        alpha.setValue(alphaIntensity);
        alpha.setMinorTickSpacing(10);
        alpha.setMajorTickSpacing(20);
        alpha.setPaintTicks(true);
        alpha.setPaintLabels(true);
        alpha.addChangeListener(this);

        btSave.addActionListener(this);
        
        contentPane.add(alphaText);
        contentPane.add(losses);
        contentPane.add(alpha);
        contentPane.add(alphaDemo);
        contentPane.add(chRender);
        contentPane.add(bitDepthText);
        contentPane.add(bitDepthChooser);
        contentPane.add(btSave);

        setContentPane(contentPane);
        //setLocationRelativeTo(null);
    }

    public static void main(String[] args) {
        Main window = new Main();

        //window.setResizable(false);
        window.setLocation(window.calculateCenterPosition());
        window.setSize(width, height);
        window.setVisible(true);
        window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    //Frame in der Mitte positionieren
    Point calculateCenterPosition(){
        GraphicsEnvironment environment = GraphicsEnvironment.getLocalGraphicsEnvironment();
        GraphicsDevice device = environment.getDefaultScreenDevice();

        DisplayMode display = device.getDisplayMode();

        int x = (display.getWidth() - width) / 2;
        int y = (display.getHeight() - height) / 2;

        return new Point(x, y);
    }

    public void actionPerformed(ActionEvent e){

    }

    public void stateChanged(ChangeEvent e){
        //Von Prozent wieder in einen int-Wert umrechnen
        alphaIntensity = (alpha.getValue() * 255) / 100;

        alphaColor = new Color(255, 0, 0, alphaIntensity);
        alphaDemo.setBackground(alphaColor);
    }
}
 

Reality

Top Contributor
Keine Idee?
Kommt den der Fehler auch bei euch?
Ist das vielleicht ein Java-Bug?

Liebe Grüße
Reality
 

L-ectron-X

Gesperrter Benutzer
Ich habe den Fehler auch. Ich habe mich vorhin schon gewundert, wusste darauf aber erst mal keinen Rat.
Es sieht so aus, als ob eine Kopie vom Cursor-Hintergrund mit dem jeweilig eingestellten Alphawert in das Panel gezeichnet wird.
Edit: Ich habe mal das JPanel gegen ein JLabel getauscht, aber das ändert seine Farbe nicht. ???:L
 

Reality

Top Contributor
L-ectron-X hat gesagt.:
Ich habe mal das JPanel gegen ein JLabel getauscht, aber das ändert seine Farbe nicht. ???:L

Dito, habe es zuerst mit einem JLabel versucht, bevor ich ein JPanel benutzte.
Oh man, sieht aus, als wäre das ein Bug.

Liebe Grüße
Reality
 

L-ectron-X

Gesperrter Benutzer
Ich habe mal als letzten Befehl ein
Code:
repaint();
in die stateChanged()-Methode eingefügt. Der Effekt ist zwar nicht verschwunden, hat sich aber etwas reduziert.
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen


Oben