Hallo zusammen,
wir bemühen uns gerade in einem mathematischen Programm eine grafische Komponente einzubinden (Koordinatensystem), dieses soll ein JSlider beinhaltet, damit man das Koordinatensystem skalieren kann.
Das Problem ist, wir setzen den SystemLookAndFeel und da sieht der Slider weniger gut aus.
Also hätte ich gerne speziell für den Slider den Starndard-, also den MetalLookAndFeel.
Meine Vorgehensweise war:
- Am Start den SystemLookAndFeelSetzen
- Bevor der entsprechende Slider hebaut wird, den LookAndFeel ändern
- danach wieder den ursprünglichen setzen.
Aus irgendeinem Grund zeigt er den Slider nur fast perfekt ein, der eigentliche Regler, den man anklickt ist teilweise durchsichtig (siehe Anhang), ich kann mir hierbei aber nicht helfen.
Vielleicht hat jemand eine Idee?
(TestforPanel startet nur ein Fenster das ein Koordinatensystem + slider anzeigen soll, Sliderklasse ist ein Panel, dass das Koordinatensystem und den slider in einem borderlayout beinhaltet und Coordinate ist das Panel auf dem das koordinatensystem gezeichnet wird)
Besten Dank für eure Ideen
wir bemühen uns gerade in einem mathematischen Programm eine grafische Komponente einzubinden (Koordinatensystem), dieses soll ein JSlider beinhaltet, damit man das Koordinatensystem skalieren kann.
Das Problem ist, wir setzen den SystemLookAndFeel und da sieht der Slider weniger gut aus.
Also hätte ich gerne speziell für den Slider den Starndard-, also den MetalLookAndFeel.
Meine Vorgehensweise war:
- Am Start den SystemLookAndFeelSetzen
- Bevor der entsprechende Slider hebaut wird, den LookAndFeel ändern
- danach wieder den ursprünglichen setzen.
Aus irgendeinem Grund zeigt er den Slider nur fast perfekt ein, der eigentliche Regler, den man anklickt ist teilweise durchsichtig (siehe Anhang), ich kann mir hierbei aber nicht helfen.
Vielleicht hat jemand eine Idee?
Java:
import java.awt.EventQueue;
import javax.swing.*;
public class Testforpanel {
private JFrame frame;
static LookAndFeel start = UIManager.getLookAndFeel();
/**
* Launch the application.
*/
public static void main(String[] args) {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException
| IllegalAccessException | UnsupportedLookAndFeelException e3) {
// if an Exception is thrown, nothing should happen
}
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Testforpanel window = new Testforpanel();
window.frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the application.
*/
public Testforpanel() {
initialize();
}
/**
* Initialize the contents of the frame.
*/
private void initialize() {
frame = new JFrame();
frame.setBounds(100, 100, 978, 785);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(null);
try {
UIManager.setLookAndFeel(start);
} catch (UnsupportedLookAndFeelException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
JPanel panel = new Sliderklasse(700);
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException
| IllegalAccessException | UnsupportedLookAndFeelException e3) {
// if an Exception is thrown, nothing should happen
}
panel.setBounds(63, 33, panel.getWidth(), panel.getHeight());
frame.getContentPane().add(panel);
}
}
Java:
import java.awt.BorderLayout;
import javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
public class Sliderklasse extends JPanel implements ChangeListener{
Coordinate coordinateSystem;
public Sliderklasse(int size)
{
this.setSize(size, size);
JSlider slider = new JSlider(30, 100, 50);
slider.addChangeListener(this);
setLayout(new BorderLayout());
add(slider, BorderLayout.SOUTH);
coordinateSystem = new Coordinate(size);
add(coordinateSystem, BorderLayout.CENTER);
}
@Override
public void stateChanged(ChangeEvent e) {
double blub = (double)((JSlider)e.getSource()).getValue()/50;
coordinateSystem.repaint();
this.repaint();
}
}
Java:
import java.awt.BorderLayout;
public class Coordinate extends JPanel
{
private static final int SIZE = 700;
private static final double xMin = -20.0;
private static final double xMax = 20.0;
private static final double yMin = -20;
private static final double yMax = 20;
public Coordinate(int size)
{
this.setSize(size, size);
}
public void paint(Graphics g) {
zeicheKoordinatenSystem(g);
g.drawString("0", berechneXPixel(xMax-xMin + 0.2), berechneXPixel(yMax-yMin +0.2));
//for(double x = xMin; x < xMax; x += 0.01 )
// g.drawLine(berechneXPixel(x), berechneYPixel(f(x)), berechneXPixel(x), berechneYPixel(f(x)));
for(double i = xMin; i < xMax; i= i+2)
{
if (i != 0)
{
g.drawLine(berechneXPixel(i),berechneYPixel(0.2) , berechneXPixel(i), berechneYPixel(-0.2));
g.drawString("" + (int)i , berechneXPixel(i), berechneYPixel(-1));
}
}
for(double i = yMin; i < yMax; i=i+2)
{
if (i !=0)
{
g.drawLine(berechneXPixel(0.2),berechneYPixel(i) , berechneXPixel(-0.2), berechneYPixel(i));
g.drawString("" + (int)i , berechneXPixel(-1), berechneYPixel(i));
}
}
}
private void zeicheKoordinatenSystem(Graphics g) {
zeichneXAchse(g);
zeichneYAchse(g);
}
private void zeichneXAchse(Graphics g) {
int startx = berechneXPixel(xMin);
int endx = berechneXPixel(xMax);
int starty = berechneYPixel(0);
int endy = berechneYPixel(0);
g.drawLine(startx, starty, endx, endy);
}
private void zeichneYAchse(Graphics g) {
int startx = berechneXPixel(0);
int endx = berechneXPixel(0);
int starty = berechneYPixel(yMin);
int endy = berechneYPixel(yMax);
g.drawLine(startx, starty, endx, endy);
}
private int berechneXPixel(double x) {
double pixelBreite = ((xMax - xMin) / (double)getWidth());
return (int) ((x - xMin) / pixelBreite );
}
private int berechneYPixel(double y) {
double pixelBreite = ((yMax - yMin) / (double)getHeight());
return getHeight() - ((int) ((y - yMin) / pixelBreite));
}
double num = 1.0;
void setNum(double num){
this.num = num;
System.out.println(num);
}
}
Besten Dank für eure Ideen