Java Analog Meter

ts230

Gesperrt
Hallo!
Ich möchte ein Analog Meter(bessergesagt ein VU-Meter) in einem JPanel anzeigen.Kann mir da jemand bitte mit helfen? Ich habe keine Erfolge bis jetzt gekriegt. Ich habe meinen Draw-code der den Hintergrund weiß füllt in ein JPanel's paintComponent gemacht,aber es geht nicht. Kann mir jemand helfen?
 
Niemand?
Ok.Ich meine was wie das:
|------------|
| / |
|------/-----|
halt nur mit nZahlen innen drinne.
 
Naja,das Problem ist,dass ich anscheinend in den InternalFrame nichts hinzufügen kann(nur .add(new JDraw()) und .getContentPane.add(BorderLayout.CENTER,new JDraw()))
Kann mir da jemand helfen?
 
Klar.
Hier mein Code im Constructor der Main-Form:
Java:
    setSystemStyle();
///        jComboBox3=new JComboBox(getServicesList());
        initComponents();
        InitTracks();
        AddTrack("one","blah",0.21f,100);
        AddTrack("two","blah",0.21f,100);
        AddTrack("three","blah",0.21f,100);
        jPanel1.setVisible(false);
        jPanel2.setVisible(false);
        jPanel3.setVisible(false);
        jPanel4.setVisible(false);
        jInternalFrame3.add(BorderLayout.CENTER,new JDraw());
        jInternalFrame3.add(BorderLayout.SOUTH,new JLabel("VU meter"));
        
        jInternalFrame3.repaint();
        try {
            jInternalFrame5.setIcon(true);
            jInternalFrame6.setIcon(true);
            jInternalFrame7.setIcon(true);
        } catch (PropertyVetoException ex) {
            Logger.getLogger(Piano.class.getName()).log(Level.SEVERE, null, ex);
        }

Und die JDraw klasse:
Java:
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package onscreenpiano;

import java.awt.*;

/**
 *
 * @author tristan
 */
public class JDraw extends javax.swing.JPanel{

    @Override
    public void paintComponent(Graphics arg0) {
        Graphics2D a = (Graphics2D) arg0;
        //GradientPaint aP = new GradientPaint(0,0, Color.WHITE, this.getWidth(),this.getHeight(), Color.GRAY);
       // arg0.setPaint(aP);
       // arg0.fillRect(0, 0, this.getWidth(), this.getHeight());
        //arg0.drawArc(this.getWidth() / 2 - 20, this.getHeight(), 15, this.getWidth() / 2, 0, 180);
        arg0.drawString("Hello!", 50, 10);
        
    }


}
Aber es wird kein Label oder Frame im InternalFrame angezeigt.
 
Zuletzt bearbeitet von einem Moderator:
Hier mal ein Testprogramm, um zu zeigen, wie/dass das Zeichnen funktioniert:
Java:
import java.awt.Color;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;

import javax.swing.JFrame;

public class AnalogMeterPanel extends javax.swing.JPanel{
 
    @Override
    public void paint(Graphics g) {
        super.paint(g);
        Graphics2D g2d = (Graphics2D)g;
        GradientPaint aP = new GradientPaint(0,0, Color.WHITE, this.getWidth(),this.getHeight(), Color.GRAY);
        g2d.setPaint(aP);
        g2d.fillRect(0, 0, this.getWidth(), this.getHeight());
        g2d.drawArc(this.getWidth() / 2 - 20, this.getHeight(), 15, this.getWidth() / 2, 0, 180);        
        g2d.setColor(Color.RED);
        g2d.drawString("Hello!", 50, 10);       
    }
 
    public static void main(String[] args) {
        JFrame f = new JFrame();
        f.setSize(300, 300);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.getContentPane().add(new AnalogMeterPanel());
        f.setVisible(true);
    }
    
}

An Deinem Code gefallen mir die add-Methoden nicht. Verwende die ContentPane, um UI-Elemente einzufügen.

Java:
jInternalFrame3.getContentPane().setLayout(new BorderLayout());
jInternalFrame3.getContentPane().add(new JDraw(), BorderLayout.CENTER);
jInternalFrame3.getContentPane().add(new JLabel("VU meter"), BorderLayout.SOUTH);
 
Zuletzt bearbeitet:
Das Beispiel geht super,aber das JInternalFrame ist immer noch total bockig selbst mit der 1-arg add Funktion(one BorderLayout)! Es möchte es einfach nicht Darstellen!Das JInternalFrame ist in einem DesktopPane,falls das hilft.
 
Liegt vermutlich daran, dass unserem AnalogMeterPanel keine Größe zugewiesen wurde. Füg mal einen Konstruktor hinzu und experimentier mit setSize():

Java:
public AnalogMeterPanel() {
    super();
    setSize(200, 200);
}
 
Danke!
Ich musste eine Größe hinzufügen
Eine Frage:der Arc wird aber nicht angezeigt,weiß jemand warum?
 

Neue Beiträge

Zurück