Diskuze: Zavření okna v Java swingu
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.


Zobrazeno 17 zpráv z 17.
K personalizaci obsahu a reklam, poskytování funkcí sociálních médií a analýze naší návštěvnosti využíváme soubory cookie. Informace o tom, jak náš web používáte, sdílíme se svými partnery pro sociální média, inzerci a analýzy. Partneři tyto údaje mohou zkombinovat s dalšími informacemi, které jste jim poskytli nebo které získali v důsledku toho, že používáte jejich služby.
Používáme nezbytné cookies pro fungování webu a s tvým souhlasem také analytické a marketingové cookies.
Zajišťují základní funkce, bezpečnost a služby, které sis vyžádal. Nelze je vypnout.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| ITnetwork | ITnetwork | Provoz webu, relace, přihlášení a uložení nastavení cookies. | PHPSESSID, auth_token, sid, itn_consent_impression, __Host-itn_consent | Relace až 1 rok |
| Google Tag Manager | Správa značek a načítání měřicích nástrojů webu. | Žádné | Neukládá se | |
| Google Fonts | Načítání typografie webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google Hosted Libraries | Načítání potřebných knihoven a stylů webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google reCAPTCHA | Ochrana formulářů a webu před zneužitím. | _GRECAPTCHA, rc::a, rc::b, rc::c, rc::f | Relace až 180 dní | |
| YouTube | Přehrávání vloženého video obsahu. | localStorage, IndexedDB; cookies after playback interaction | Relace až trvalé úložiště | |
| Vimeo | Vimeo | Přehrávání vloženého video obsahu. | __cf_bm, _cfuvid, vuid, localStorage, IndexedDB | Relace až 2 roky |
| Facebook Login | Meta | Přihlášení pomocí účtu třetí strany. | Úložiště řízené poskytovatelem | Relace až 1 rok |
| GoPay | GoPay | Zpracování uživatelem vyžádané platby. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
Pomáhají nám porozumět používání webu a zlepšovat ho.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Analytics 4 | Měření návštěvnosti a používání webu. | _ga, _ga_* | Až 2 roky | |
| Microsoft Clarity | Microsoft | Měření návštěvnosti a používání webu. | _clck, _clsk, _cltk | Relace až 1 rok |
Slouží k měření kampaní, personalizaci reklamy a marketingové komunikaci.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Ads | Měření kampaní, reklama a remarketing. | _gcl_au, _gcl_ls | Relace až 90 dní | |
| Meta Pixel | Meta | Měření kampaní, reklama a remarketing. | _fbp, _fbc, localStorage | Až 90 dní |
| Sklik | Seznam.cz | Měření kampaní, reklama a remarketing. | retargeting, sid, szn:* | Relace až trvalé úložiště |
| LinkedIn Insight | Měření kampaní, reklama a remarketing. | bcookie, li_gc, lidc, __cf_bm | Relace až 1 rok | |
| Ecomail | Ecomail.cz | Měření kampaní, reklama a remarketing. | ecmid, Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
| Atribuce kampaní ITnetwork | ITnetwork | Přiřazení návštěvy a objednávky ke kampani. | campaign_clid[*], user_session_context | Až 1 rok |
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.


Ahoj,
frame.setVisible(true)// Zobraz okno
frame.setVisible(false)// nezobrazuj okno, ale proces je furt spuštěný,
tím okno nevypneš
frame.setDefaultCloseOperation(EXIT_ON_CLOSE);//Tohle je to co
hledáš...
frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
myslím, že tohle není to co hledá.. tohle mu vypne celý program, on chce
jen, aby zmizelo okno programu, ale aby ten program zůstal stále spuštěný

Tak drbnout do Netbeansu za behu programu frame.setVisible(false); je prasarna. Ale celkem zajimavy dotaz, zkusim poresit jak bude volno.
Máš ten frame inicializovaný ve chvíli kdy na něm voláš setVisible()? NullPointerException by napovídalo, že ne...
* To change this license header, choose License Headers in Project
Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package helloworldd;
import java.awt.GridBagLayout;
import java.awt.LayoutManager;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
/**
*
* @author Lincerix
*/
public class HelloWorldd extends JFrame {
JFrame frame; Frame
JButton button;Tlačítko
JPanel panel;//Panel na zarovnání, aby nevyplňovalo tlačítko celou plochu
Framu
public HelloWorldd() {
panel = new JPanel(); Vytvoř panel
panel.setLayout(new GridBagLayout());Nastav panelu rozestavení
button = new JButton("VisibleFalse");Vytvoř tlačítko a pojmenuj
ho
button.setBounds(20, 20, 20, 20);Nastav tlačítko
frame = new JFrame(); Vytvoř frame
frame.setDefaultCloseOperation(EXIT_ON_CLOSE);Aby se frame
zavíral
frame.setVisible(true);Aby byl Frame vidět
frame.setSize(200, 300);Rozměry Framu
button.addActionListener(údálost
new ActionListener() {
public void actionPerformed(ActionEvent ae) {
frame.setVisible(false);
}
}
);
panel.add(button);Nacpi tlačítko do panelu
frame.add(panel);//Nacpi panel do framu
}
public static void main(String[] args) {
// TODO code application logic here
HelloWorldd world = new HelloWorldd();//Všechno to pusť
}
}
ja bych to nechal zmizet asi takhle 
frame = new JFrame() například
Nechceš sem postnout celý ten kód rovnou, ať se na to můžem
kouknout?
main
*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package screenshot;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import javax.swing.JButton;
import javax.swing.JFrame;
public class ScreenShot extends JFrame {
public boolean vis = true;
ScreenShot(){
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Panel panel = new Panel();
this.add(panel);
this.setVisible(vis);
this.pack();
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) throws IOException{
ScreenShot ss = new ScreenShot();
// TODO code application logic here
}
}
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package screenshot;
import java.awt.AWTException;
import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.TextArea;
import java.awt.TextField;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.imageio.ImageIO;
import javax.swing.BoxLayout;
import javax.swing.GroupLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class Panel extends JPanel{
TextField ta;
String u;
Panel(){
FlowLayout f = new FlowLayout();
this.setLayout(f);
this.setPreferredSize(new Dimension(200, 200));
A a = new A();
JButton but = new JButton("Screenshot");
but.setMinimumSize(new Dimension(50, 50));
ta = new TextField("", 20);
ta.setMaximumSize(new Dimension(50, 50));
this.addMouseListener(a);
this.add(ta);
this.add(but);
Act act = new Act();
but.addActionListener(act);
}
public void shot() throws AWTException, IOException{
Robot robot = new Robot();
Rectangle area = new Rectangle(new Dimension(Toolkit.getDefaultToolkit().getScreenSize()));
BufferedImage buf = robot.createScreenCapture(area);
String cesta = System.getenv("HOME") + File.separator + "Plocha" + File.separator + u + ".jpg";
ImageIO.write(buf, "jpg", new File(System.getenv("HOME") + File.separator + "Plocha" + File.separator + u + ".jpg"));
}
public class Act implements ActionListener{
ScreenShot ss;
@Override
public void actionPerformed(ActionEvent e) {
try {
ss.setVisible(false);
u = ta.getText();
shot();
JOptionPane.showMessageDialog(null, "Hotovo");
} catch (AWTException ex) {
Logger.getLogger(Panel.class.getName()).log(Level.SEVERE, null, ex);
System.out.println("chyba");
} catch (IOException ex) {
Logger.getLogger(Panel.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
public class A implements MouseListener{
@Override
public void mouseClicked(MouseEvent e) {
}
@Override
public void mousePressed(MouseEvent e) {
}
@Override
public void mouseReleased(MouseEvent e) {
}
@Override
public void mouseEntered(MouseEvent e) {
}
@Override
public void mouseExited(MouseEvent e) {
}
}
}
znovu main.. měl jsem tam kraviny.. už jsem zkoušel všechno
package screenshot;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import javax.swing.JButton;
import javax.swing.JFrame;
public class ScreenShot extends JFrame { ;
ScreenShot(){
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Panel panel = new Panel();
this.add(panel);
this.setVisible(true);
this.pack();
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) throws IOException{
ScreenShot ss = new ScreenShot();
// TODO code application logic here
}
}
Jak jsem čekal, voláš tam ss.setVisible() v té actionPerformed() v objektu 'a' ve třídě Act, aniž bys to ss předtím někde nějak vytvořil (inicializoval nebo získal předáním). Tu třídu Act vyhoď, je zbytečná, akci na tlačíko přidej tak jak ti to výše ukázal lincerix anonymní implementací ActionListeneru:
button.addActionListener( new ActionListener() {
public void actionPerformed(ActionEvent ae) {
ss.setVisible(false);
}
});
přičemž to 'ss' musíš dostat do toho panelu nejlépe parametrem jeho konstruktoru, budeš mít konstruktor: Panel(ScreenShot ss) ten budeš volat v ScreenShot - Panel panel = new Panel(this) a v tom konstruktoru toho panelu pak budeš mít dostupnou tu instanci toho objektu ScreenShot ss takže budeš moct udělat ss.setVisible()...
Btw pojmenovávat proměnné jedním či dvěma písmenky je nepěkný zvyk, takové kryptické zdrojáky se pak blbě čtou vůbec se toho neboj a pojmenuj si proměnnou nějakým vystižným pojmenováním, IDE to doplňuje při psaní z velké části za tebe, tak proč toho nevyužít a později oceníš že se to líp čte. Například to tlačítko - 'but' vs třeba startActionButton, doScreenshotButton, takePictureButton ...
Ještě bych dodal jenom k tomu, co napsal tady zdatný kolega Atrament, aby
ses vůbec nestyděl dělat komenty.
Mně tam sice komenty vypadly, protože se to celé drblo při kopírování z
telefonu, ale jak nebudeš dělat komenty, tak je to katastrofa - zvykni si na
to
(kód je i pak
přehlednější pro lidi, co to čtou).
Zobrazeno 17 zpráv z 17.