Java JButton仅出现在鼠标上方
我的问题是,我的JButton只有在我将鼠标移到按钮应该所在的位置时才会出现。我尝试了很多解决方案,比如使用paintComponents()而不是paint()、使用repaint()、setVisible()等等,但都没有任何帮助。如果我把它注释掉,我肯定问题出在文本区域:Java JButton仅出现在鼠标上方,java,jpanel,jbutton,Java,Jpanel,Jbutton,我的问题是,我的JButton只有在我将鼠标移到按钮应该所在的位置时才会出现。我尝试了很多解决方案,比如使用paintComponents()而不是paint()、使用repaint()、setVisible()等等,但都没有任何帮助。如果我把它注释掉,我肯定问题出在文本区域:pnlBackground.add(txt),程序启动时按钮弹出,但文本区域不显示。有什么想法吗 public class MediGraph extends JFrame { private JPanel pnlBac
pnlBackground.add(txt)代码>,程序启动时按钮弹出,但文本区域不显示。有什么想法吗
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();
}}
公共类MediGraph扩展JFrame{
私人JPanel pnlBackground;
私人JPanel pnlGraph;
私有JTextareaTXT;
私人JButton btnFileChooser;
专用JFileChooser fcFiler;
公共静态字符串fileName=“Langzeitblutdruck_PID34567.txt”;
公共MediGraph(){
//JFrame
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
设置尺寸(新尺寸(900420));
setLocationRelativeTo(空);
可设置大小(假);
setTitle(“MediGraph”);
//PNL背景
pnlBackground=newjpanel();
pnlBackground.setLayout(空);
pnlBackground.立根(0,0,650,420);
//气压计
pnlGraph=new JPanel();
pnlGraph.setLayout(空);
pnlGraph.setBounds(0,0,650,370);
pnlBackground.add(pnlGraph);
//JTextArea
txt=新的JTextArea();
txt.setBounds(620,5270305);
//fcFiler
fcFiler=newjfilechooser();
//btnFileChooser
btnFileChooser=新的JButton(“Datei einlesen”);
btnFileChooser.立根(250335135,30);
btnFileChooser.addActionListener(新ActionListener(){
@凌驾
已执行的公共无效操作(操作事件e){
fcFiler.showOpenDialog(btnFileChooser);
if(fcFiler.getSelectedFile()!=null){
fileName=fcFiler.getSelectedFile().getAbsolutePath();
System.out.println(文件名);
重新油漆();
}
}
});
pnlBackground.add(txt);
pnlBackground.add(btnfelechooser);
添加(pnlBackground);
setVisible(真);
}
公共空间涂料(图g){
g=this.pnlGraph.getGraphics();
色差=新色差(204,0,0);//法本·für·阿奇森,坚定和收缩
颜色green=新颜色(0,195,0);
靛蓝色=新颜色(128,0128);
g、 clearRect(0,0600700);
//x和y轴
g、 色(靛蓝);
g、 抽绳(27,15,27,300);
g、 抽绳(27300600300);
//阿奇森背衬
对于(int i=27;i<600;i+=20){
g、 抽绳(i,298,i,302);
如果(i<300)
g、 抽绳(24,i,30,i);
}
//贝什里夫顿缺席
//y-乙酰胆碱酯酶
g、 抽绳(“100”、5213);
g、 抽绳(200、5113);
g、 抽绳(“300”、5、13);
g、 抽绳(“Werte”,35,23);
//x-乙酰胆碱酯酶
g、 抽绳(“5”、125、314);
g、 抽绳(“10”、225、314);
g、 抽绳(“15”、325、314);
g、 抽绳(“20”、425、314);
g、 抽绳(“25”、525、314);
g、 抽绳(“在斯泰登”,548319);
//布草
g、 抽绳(60530059595);
g、 抽绳(605300595305);
g、 抽绳(27,14,22,22);
g、 抽绳(27,14,32,22);
//Firmenlogo:)
g、 setFont(新字体(“Times new Roman”,Font.ITALIC,20));
g、 setColor(HeretsuEnt);
g、 抽绳(“Heretsu Enterprises”,400355);
//勒让德
g、 setFont(新字体(“Arial”,Font.LAYOUT_LEFT_TO_RIGHT,15));
g、 setColor(Color.RED);
g、 抽绳(100320120320);
g、 抽绳(“Puls”,30,325);
g、 setColor(Color.BLUE);
g、 抽绳(100340120340);
g、 抽绳(“舒张期”,30345);
g、 色(绿色);
g、 抽绳(100360120360);
g、 抽绳(“收缩期”,30,365);
//石墨烯
Untersuchung Untersuchung=新的Untersuchung();
lesen.lesen(文件名);
ArrayList Messwert=untersuchung.getMesswert();
g、 setColor(HeretsuEnt);
g、 抽绳(文件名,200,15);
字符串ausgabe=“Datum”+“Uhrzeit”+“收缩”+“舒张”+“Puls”+“\n”;
对于(int i=0;i
您有很多问题
让我们从setLayout(null)开始代码>
避免使用null
布局,像素完美的布局在现代ui设计中是一种错觉。影响零部件单个尺寸的因素太多,您无法控制。Swing的设计初衷是与布局管理器一起工作,丢弃这些布局管理器将导致无止境的问题,您将花费越来越多的时间来纠正这些问题
虽然这可能“看起来”是一个好主意,但事实并非如此,而且你最终会遇到很多小问题,这些问题几乎是随机出现在不同的计算机上。布局管理API旨在克服这些问题,使您的生活更轻松
接下来,绘画
public void paint(Graphics g){
g = this.pnlGraph.getGraphics();
您重写了JFrame
的paint
,这本身并不推荐,但随后您无法调用super.paint
,wh