Co jest nie tak? Program java

0

Witam! Otóż mam taki kod:


import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
import java.io.*;

public class TaskKiller extends JFrame implements ActionListener {
    JButton exitBtn, minimizeBtn, maximizeBtn, OkExitBtn;
    JFrame frame, minimizedFrame, err;

    public static void main(String[] args)
    {
        String task = null; 
        Scanner scan = new Scanner(System.in);
        new TaskKiller();

    }

    public TaskKiller()
    {
        Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
        double xFrame = dim.getWidth() - 455;
        double yFrame = dim.getHeight() - 225;
        double xMFrame = dim.getWidth() - 50;
        double yMFrame = dim.getHeight() - 100;

        minimizedFrame = new JFrame();
        minimizedFrame.setUndecorated(true);
        minimizedFrame.setVisible(false);
        minimizedFrame.setBounds((int)xMFrame,(int)yMFrame, 50,50);
        minimizedFrame.setResizable(false);
        minimizedFrame.setAlwaysOnTop(true);

        frame = new JFrame("TaskKiller");
        frame.setResizable(false);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setBounds((int)xFrame,(int)yFrame,450,175);
        frame.setUndecorated(true);
        frame.setVisible(true);
        frame.setAlwaysOnTop(true);
        frame.setBackground(Color.black);

        err = new JFrame("Error");
        err.setVisible(false);
        err.setResizable(false);
        err.setLocationRelativeTo(null);
        err.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        err.setSize(500,500);

        minimizeBtn = new JButton();
        minimizeBtn.setBounds(390, 0, 30, 30);
        minimizeBtn.setBackground(Color.blue);
        minimizeBtn.addActionListener(this);

        maximizeBtn = new JButton();
        maximizeBtn.setBounds(0,0,0,0);
        maximizeBtn.setBackground(Color.blue);
        maximizeBtn.addActionListener(this);

        exitBtn = new JButton();
        exitBtn.setBounds(420, 0, 30,30);
        exitBtn.setBackground(Color.red);   
        exitBtn.addActionListener(this);

        OkExitBtn = new JButton();
        OkExitBtn.setBounds(220, 450, 30,50);   
        OkExitBtn.addActionListener(this);

        frame.add(exitBtn);
        frame.add(minimizeBtn);
        minimizedFrame.add(maximizeBtn);

    }
    public void actionPerformed(ActionEvent e) {
        Object source = e.getSource();

        if(source==exitBtn||source==OkExitBtn)
        {
            err.dispose();
            minimizedFrame.dispose();
            frame.dispose();
        }
        else if(source==minimizeBtn)
        {
            frame.setVisible(false);
            minimizedFrame.setVisible(true);
        }
        else if(source==maximizeBtn)
        {
            minimizedFrame.setVisible(false);
            frame.setVisible(true);
            minimizeBtn.setBounds(390, 0, 30, 30);
            minimizeBtn.setSize(30,30);
        }
        else
        {
            err.setVisible(true);
        }
    }

}

I co jakiś czas, gdy uruchamiam program, przycisk "minimizeBtn", zakrywa całą dostępną przestrzeń, zamiast tylko swoje 30x30 px w rogu... Co może to powodować? Da się temu zaradzić? Prosiłbym o pomoc...

0

Brakuje ci @Override przed public void actionPerformed(ActionEvent e) { ?

1

Dodaj

 frame.setLayout(null);

gdzieś przed

        frame.add(exitBtn);
        frame.add(minimizeBtn);

Wyjasnienie: masz defaultowy layout - BorderLayout i wkładasz wszystko do Center (domyślnie). Swing głupieje.

Jeszcze

 frame.setVisible(true);

Przenieś na koniec metody (inaczej może sie wyświetlić nie w pełni narysowane).

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0