У меня проблема с тем, что мой JButton появляется только в том случае, если я перемещаю мышь над положением, где должна быть кнопка. Я пробовал много разрешений, таких как paintComponents() вместо paint(), использовать repaint(), setVisible() и т. Д., Но мне ничего не помогло. Я уверен, что проблема в TextArea, если я прокомментирую это: pnlBackground.add(txt);
, кнопка появляется, когда запускается программа, но TextArea не появляется. Есть идеи?JButton появляется только на мышке
public class MediGraph extends JFrame {
private JPanel pnlBackground;
private JPanel pnlGraph;
private JTextArea txt;
private JButton btnFileChooser;
private JFileChooser fcFiler;
public static String fileName = "Langzeitblutdruck_PID34567.txt";
public MediGraph(){
//JFrame
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(new Dimension(900,420));
setLocationRelativeTo(null);
setResizable(false);
setTitle("MediGraph");
//pnlBackground
pnlBackground = new JPanel();
pnlBackground.setLayout(null);
pnlBackground.setBounds(0, 0, 650, 420);
//pnlGraph
pnlGraph = new JPanel();
pnlGraph.setLayout(null);
pnlGraph.setBounds(0, 0, 650, 370);
pnlBackground.add(pnlGraph);
//JTextArea
txt = new JTextArea();
txt.setBounds(620, 5, 270, 305);
//fcFiler
fcFiler = new JFileChooser();
//btnFileChooser
btnFileChooser = new JButton("Datei einlesen");
btnFileChooser.setBounds(250, 335, 135, 30);
btnFileChooser.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
fcFiler.showOpenDialog(btnFileChooser);
if(fcFiler.getSelectedFile() != null){
fileName = fcFiler.getSelectedFile().getAbsolutePath();
System.out.println(fileName);
repaint();
}
}
});
pnlBackground.add(txt);
pnlBackground.add(btnFileChooser);
add(pnlBackground);
setVisible(true);
}
public void paint(Graphics g){
g = this.pnlGraph.getGraphics();
Color HeretsuEnt = new Color (204, 0, 0); //Farben für Achsen, Firmenlogo und Systole
Color Greeen = new Color (0, 195, 0);
Color Indigo = new Color (128,0,128);
g.clearRect(0, 0, 600, 700);
//x und y Achse
g.setColor (Indigo);
g.drawLine (27, 15, 27, 300);
g.drawLine (27, 300, 600, 300);
// Linien der Achsenabschnitte
for (int i = 27; i < 600; i += 20) {
g.drawLine (i, 298, i, 302);
if(i < 300)
g.drawLine (24, i, 30, i);
}
//Beschriftung Abschnitte
//y-Achse
g.drawString("100", 5, 213);
g.drawString("200", 5, 113);
g.drawString("300", 5, 13);
g.drawString("Werte",35, 23);
//x-Achse
g.drawString("5", 125, 314);
g.drawString("10", 225, 314);
g.drawString("15", 325, 314);
g.drawString("20", 425, 314);
g.drawString("25", 525, 314);
g.drawString("in Stunden",548, 319);
// Linen für die Pfeilspitzen
g.drawLine (605, 300, 595, 295);
g.drawLine (605, 300, 595, 305);
g.drawLine (27, 14, 22, 22);
g.drawLine (27, 14, 32, 22);
//Firmenlogo :)
g.setFont(new Font("Times New Roman", Font.ITALIC, 20));
g.setColor(HeretsuEnt);
g.drawString ("Heretsu Enterprises",400, 355);
//Legende
g.setFont(new Font("Arial", Font.LAYOUT_LEFT_TO_RIGHT, 15));
g.setColor(Color.RED);
g.drawLine(100, 320, 120, 320);
g.drawString("Puls", 30, 325);
g.setColor(Color.BLUE);
g.drawLine(100, 340, 120, 340);
g.drawString("Diastole", 30, 345);
g.setColor(Greeen);
g.drawLine(100, 360, 120, 360);
g.drawString("Systole", 30, 365);
//Graphen
Untersuchung untersuchung = new Untersuchung();
Auslesen.lesen(fileName);
ArrayList messwerte = untersuchung.getMesswerte();
g.setColor(HeretsuEnt);
g.drawString(fileName,200, 15);
String ausgabe = " Datum "+" Uhrzeit "+" Systole "+"Diastole "+"Puls "+"\n ";
for(int i = 0;i < messwerte.size();i++){
ausgabe += "" +""+((Messwert)messwerte.get(i)).getDatum() + " " + ((Messwert)messwerte.get(i)).getUhrzeit()
+ " " + ((Messwert)messwerte.get(i)).getSystole() + " " + ((Messwert)messwerte.get(i)).getDiastole() + " " + ((Messwert)messwerte.get(i)).getPuls() +"\n ";
}
txt.setText(ausgabe);
for (int j = 4; j < messwerte.size() - 1; j++) {
g.setColor(Color.RED);
g.drawLine((j*27/4),(-300 + ((Messwert)messwerte.get(j)).getPuls())/-1,(j+1)*27/4, (-300 + ((Messwert)messwerte.get(j+1)).getPuls())/-1);
g.setColor(Color.BLUE);
g.drawLine((j*27/4),(-300 + ((Messwert)messwerte.get(j)).getDiastole())/-1,(j+1)*27/4,(-300 + ((Messwert)messwerte.get(j+1)).getDiastole())/-1);
g.setColor(Greeen);
g.drawLine((j*27/4),(-300 + ((Messwert)messwerte.get(j)).getSystole())/-1,(j+1)*27/4,(-300 + ((Messwert)messwerte.get(j+1)).getSystole())/-1);
}
}
public static void main(String[] args) {
new MediGraph();
}}
У вас есть несколько проблем в вашем коде, достаточно, чтобы убедить меня, что вы Отсутствие значительных элементов работы Java Swing. Вы должны попробовать создать несколько меньших примеров или следовать некоторым учебным пособиям, чтобы улучшить свои навыки. – ControlAltDel
Не используйте пустые макеты; не переопределяйте краску и не вызывайте super.paint; не используйте getGraphics, особенно когда ваша картина одного компонента и пытайтесь использовать графику из другого компонента; не изменять состояние какого-либо компонента прямо или косвенно из-за какого-либо метода рисования – MadProgrammer