JPanel, JFrame, JFrameView - pasek tytułowy windows

Odpowiedz Nowy wątek
2011-09-18 22:53
0

Szanowni forumowicze,
Mam problem z usunięciem paska tytułowego windows. Otóż z google wiem, że dla JFrame jest setUndecorated(true), ale dla JPanel i JFrameView (na którym jest główne okno) nie ma tej metody.
Czy jest możliwość z wszystkich tych komponentów usunąć ten pasek tytułowy?
Jak zrobię wyświetlanie nowego okna na JFrame z eventa (button) i ustawię setUndecorated(true); to mi wywala:

SEVERE: Application class kartapracy.KartaPracyApp failed to launch
java.awt.IllegalComponentStateException: The frame is displayable

Tak więc nawet to nie działa.


"Ten, de profundis, z ciemnego kurhanu
Na trąbę powstanie. " Juliusz Słowacki

"Polacy! Gdyby Spartanie odżyli i zobaczyli Wasz heroizm i bohaterstwo, waleczny i dzielny ten naród schyliłby przed Wami czoło. Polska nie może być zwyciężona." - J.Bryan
edytowany 1x, ostatnio: arrowman, 2011-09-18 22:54

Pozostało 580 znaków

2011-09-18 23:49
1

Koniecznie chcesz używać wymienionych komponentów? Nie jestem pewien, czy chodzi Ci o osiągnięcie takiego efektu?

user image

Na załączonym zdjęciu widać takie szare okienko z napisem Pozycja myszy. Jest to komponent JWindow z dodanymi do niego jakimiś JLabelami. W tle widać okno główne aplikacji, ten JWindow jest nad nim, a nie w nim, bo tak to może wyglądać. Możesz mu normalnie ustalić LayoutManagera, dodawać komponenty. Żeby nim ruszać zaimplementowałem MouseMotionListener w nim i zmieniam pozycję jak go przeciągam myszą.

Pozostało 580 znaków

2011-09-19 00:16
0
Mrowa napisał(a)

Na załączonym zdjęciu widać takie szare okienko z napisem Pozycja myszy. Jest to komponent JWindow z dodanymi do niego jakimiś JLabelami. W tle widać okno główne aplikacji, ten JWindow jest nad nim, a nie w nim, bo tak to może wyglądać. Możesz mu normalnie ustalić LayoutManagera, dodawać komponenty. Żeby nim ruszać zaimplementowałem MouseMotionListener w nim i zmieniam pozycję jak go przeciągam myszą.

Wow... Właśnie tak!
A skąd masz tego JWindow? Nie ma go w swingu.
Sam zrobiłeś? A mogę wiedzieć z czego/jak?
Nieraz już sobie już robiłem własne komponenty będące rozszerzeniem SWINGa do palety, ale od postaw jeszcze nic.
Prosty, ale ładny ten GUI.


"Ten, de profundis, z ciemnego kurhanu
Na trąbę powstanie. " Juliusz Słowacki

"Polacy! Gdyby Spartanie odżyli i zobaczyli Wasz heroizm i bohaterstwo, waleczny i dzielny ten naród schyliłby przed Wami czoło. Polska nie może być zwyciężona." - J.Bryan
edytowany 2x, ostatnio: arrowman, 2011-09-19 00:18

Pozostało 580 znaków

2011-09-19 00:25

Klasa JWindow znajduję się w pakiecie javax.swing.JWindow.

Ten panel zrobiłem jako klasę, która dziedziczy po JWindow i implementuje wspomniany MouseMotionListener. Mogę się podzielić kodem, nie ma problemu, rzuć sobie okiem. Tak wygląda klasa z tym komponentem:


package com.blogspot.pgoralik.jautomaton;

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

public class InfoPanel extends JWindow implements MouseMotionListener {

    public InfoPanel() {
        super();
        setLayout(new FlowLayout());
        setBounds(0, 0, 110, 50);
        setAlwaysOnTop(true);
        setCursor(new Cursor(Cursor.MOVE_CURSOR));
        setVisible(true);

        add(mousePosTitleLabel = new JLabel("Pozycja myszy"));
        add(mousePosLabel = new JLabel("Czekaj..."));

        addMouseMotionListener(this);
    }

    void updateMousePos() {
        mousePos.x = MouseInfo.getPointerInfo().getLocation().x;
        mousePos.y = MouseInfo.getPointerInfo().getLocation().y;

        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                mousePosLabel.setText(mousePos.x + " " + mousePos.y);
            }
        });
    }

    @Override public void mouseDragged(final MouseEvent e) {
        if(firstDrag) {
            firstDrag = false;
            mouseStartDragPos = e.getPoint();
        }

        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                setLocation(mousePos.x - mouseStartDragPos.x, mousePos.y - mouseStartDragPos.y);
            }
        });

    }

    @Override public void mouseMoved(MouseEvent e) {
        // Reset firstDrag if holding button ends
        if(!firstDrag) {
            firstDrag = true;
        }
    }

    private Point mouseStartDragPos;
    private boolean firstDrag = true;
    private JLabel mousePosTitleLabel;
    private JLabel mousePosLabel;
    private Point mousePos = new Point();
}

Pozostało 580 znaków

2011-09-19 00:35
0

O, dziękuję:-) Za ifno i kod. Na pewno go prześledzę i wykorzystam do swojego okienka.

Tak jak się zastanowiłem to chyba zrobię to okno jako komponent mainPanel, a dokładniej jeszcze panelu niżej w hierarchii. Będzie taki jeden panel gdzie będą się otwierać okna i poza niego z oknem nie wyjedziesz (x to będzie zamknięcie okna, minimize to będzie chować jako taki buttonik na dolnej belce (jPanel) itp.):-) Jeżeli się uda, ale dlaczego by nie, w końcu z takim forum jak 4programmers dużo się da.
Jak zrobię te okienko to też zamieszczę kod, chyba, że będzie szambo:-)

P.S. Fajny blog. Ja swojego wstydzę się zrobić, bo będę pieprzył głupoty i farmazony.


"Ten, de profundis, z ciemnego kurhanu
Na trąbę powstanie. " Juliusz Słowacki

"Polacy! Gdyby Spartanie odżyli i zobaczyli Wasz heroizm i bohaterstwo, waleczny i dzielny ten naród schyliłby przed Wami czoło. Polska nie może być zwyciężona." - J.Bryan
edytowany 1x, ostatnio: arrowman, 2011-09-19 00:36
P.S Dzięki :) - Mrowa 2011-09-19 08:21

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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