JPopupMenu를 만들려고 할 때 또는 실제로 JPopupMenu를 없애려고 할 때 코드 라인이 있습니다. 나는 주위에 솔루션을 찾고 있었고 그들 모두는 컴포넌트 .setVisible (false) 또는 .setVisible (true)를 사용하고있다.Java JPopupMenu setVisible (false);
하지만 제 경우에는 내가 시도한 것을 mather에 사용할 수 없습니다. 전체적으로, 내 앱. 일하고 있고 System.out.println을 사용할 것이다 ("잘 동작 하는가?"); 그래서 문을 변경, 루프를 수행하고 ActionListener/ItemListener 그래서 작동 알고 있습니다. Basickly "CreateGUI"를 사용하여 메인 윈도우를 만들고 main ([String [] args)를 호출하고 프레임 클래스를 가지고 패널 & 칸을 배치하여 레이아웃을 제어합니다. 내 프레임에는 다른 것들이 있는데, JButton "vHent"가 있고 PopKalender()를 호출하면 JPOPupMenu가 화면에 표시됩니다. JPopupMenu "popUpKalenderWindow"에는 JButton이 "kill", "OK"(사용되지 않음) 및 MenuItem ("vMenu Tryk Her")이 있습니다.
제 아이디어는 MenuItems에서 읽은 일부 상태를 가져오고이 시점에서 JButton "kill"은 JPopupMenu를 종료하는 것입니다. 하지만 sayd는 아무것도 PopUpMenu를 종료하는 것 같습니다! 하지만 System.out.println()을 사용하여 검사 할 때 다른 모든 작업을 수행하면 Loops, Construktor 호출, Button/MenuItems 등이 작업 중이라는 것을 알 수 있습니다. . 나는 ActionPerformedListener 바로 아래에 popUpKalenderWindow.setVisible (false)를 넣으려고 시도했다. PopKalender (true/false)에서 true/false를 캐스팅하려고 시도하고 if-statement를 createt했다. 지금보십시오) 그리고 그것은 단지 아무 mather도 작동하지 않을 것입니다.
(Eclipse를 사용하므로 코드 라인이 바로 복사됩니다. 일부 의견은 덴마크어 (매우 유감입니다)이지만 필요로하는 곳의 라인은 영어로되어 있습니다. 예, CheckBox는 ArrayList에 있어야하고 for() {}로 끝나야합니다. 그래서 이것은 초보자 용 솔루션입니다! ).
아무도 나를 도울 수 있고 왜 "살인"버튼을 눌렀을 때 PopKalender()가 사라지지 않을지 말해 줄 수 있습니까 ??
//package components;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.ComponentOrientation;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import javax.swing.AbstractButton;
import javax.swing.BorderFactory;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.JTextField;
public class Frame extends JPanel implements ItemListener, ActionListener {
private static final long _1L = 1L;
/**
*
*/
// Klargør CheckBoxes
JCheckBox tal1;
JCheckBox tal2;
JCheckBox tal3;
JCheckBox tal4;
JCheckBox tal5;
JCheckBox tal6;
JCheckBox tal7;
JCheckBox tal8;
JCheckBox tal9;
JCheckBox tal10;
JCheckBox tal11;
JCheckBox tal12;
JCheckBox tal13;
JCheckBox tal14;
JCheckBox tal15;
JCheckBox tal16;
JCheckBox tal17;
JCheckBox tal18;
JCheckBox tal19;
JCheckBox tal20;
JCheckBox tal21;
JCheckBox tal22;
JCheckBox tal23;
JCheckBox tal24;
JCheckBox tal25;
JCheckBox tal26;
JCheckBox tal27;
JCheckBox tal28;
JCheckBox tal29;
JCheckBox tal30;
JCheckBox tal31;
JCheckBox tal32;
JCheckBox tal33;
JCheckBox tal34;
JCheckBox tal35;
JCheckBox tal36;
//Klargør ArrayList til valgte tal
ArrayList<Integer> valg = new ArrayList<Integer>();
//Klargør knapper
JButton vOk; //til valgte tal Tekst: Tilføj
JButton vHent; //til at hente uge/kalender for valg af uge
JButton bRegn; //til at beregne ugen tal
//Klargør Tekster
JLabel labelValg = new JLabel("Du har valgt: "); //til valgte tal
JLabel labelTidNu = new JLabel("år-uge-dag-kl"); //til nuværende tid
JLabel labelValgTid = new JLabel("år-uge der skal skrives til"); //til valgte uge/år, der skal tilføjes Talvalg
JLabel labelUd_1 = new JLabel(" 1: "); //til udlæsning af Talforslag LabelUd_1 - LabelUd_10
JLabel labelUd_2 = new JLabel(" 2: ");
JLabel labelUd_3 = new JLabel(" 3: ");
JLabel labelUd_4 = new JLabel(" 4: ");
JLabel labelUd_5 = new JLabel(" 5: ");
JLabel labelUd_6 = new JLabel(" 6: ");
JLabel labelUd_7 = new JLabel(" 7: ");
JLabel labelUd_8 = new JLabel(" 8: ");
JLabel labelUd_9 = new JLabel(" 9: ");
JLabel labelUd_10 = new JLabel("10: ");
public Frame(){
super(new BorderLayout());
//Opret Paneler til under paneler
//Opret Top, left, center, right, buttom Panel
JPanel topPanel = new JPanel(); //Indsæt BorderLayout efter opstilling !
JPanel leftPanel = new JPanel();
JPanel centerPanel = new JPanel();
JPanel rightPanel = new JPanel();
JPanel bottomPanel = new JPanel();
//Set internt Layout for top, left, right panel
topPanel.setLayout(new FlowLayout(FlowLayout.LEFT));
leftPanel.setLayout(new GridLayout(4, 0));
rightPanel.setLayout(new GridLayout(2, 0));
//Set størrelse på paneler
topPanel.setPreferredSize(new Dimension(900, 50));
leftPanel.setPreferredSize(new Dimension(300, 500));
centerPanel.setPreferredSize(new Dimension(300, 500));
rightPanel.setPreferredSize(new Dimension(300, 500));
bottomPanel.setPreferredSize(new Dimension(900, 50));
//tilføj paneler til frame'en og placer dem i layout'et
add(topPanel, BorderLayout.PAGE_START);
add(leftPanel, BorderLayout.LINE_START);
add(centerPanel, BorderLayout.CENTER);
add(rightPanel, BorderLayout.LINE_END);
add(bottomPanel, BorderLayout.PAGE_END);
//Opret Checkboxes
tal1 = new JCheckBox("1");
tal2 = new JCheckBox("2");
tal3 = new JCheckBox("3");
tal4 = new JCheckBox("4");
tal5 = new JCheckBox("5");
tal6 = new JCheckBox("6");
tal7 = new JCheckBox("7");
tal8 = new JCheckBox("8");
tal9 = new JCheckBox("9");
tal10 = new JCheckBox("10");
tal11 = new JCheckBox("11");
tal12 = new JCheckBox("12");
tal13 = new JCheckBox("13");
tal14 = new JCheckBox("14");
tal15 = new JCheckBox("15");
tal16 = new JCheckBox("16");
tal17 = new JCheckBox("17");
tal18 = new JCheckBox("18");
tal19 = new JCheckBox("19");
tal20 = new JCheckBox("20");
tal21 = new JCheckBox("21");
tal22 = new JCheckBox("22");
tal23 = new JCheckBox("23");
tal24 = new JCheckBox("24");
tal25 = new JCheckBox("25");
tal26 = new JCheckBox("26");
tal27 = new JCheckBox("27");
tal28 = new JCheckBox("28");
tal29 = new JCheckBox("29");
tal30 = new JCheckBox("30");
tal31 = new JCheckBox("31");
tal32 = new JCheckBox("32");
tal33 = new JCheckBox("33");
tal34 = new JCheckBox("34");
tal35 = new JCheckBox("35");
tal36 = new JCheckBox("36");
//Set default
tal1.setSelected(false);
tal2.setSelected(false);
tal3.setSelected(false);
tal4.setSelected(false);
tal5.setSelected(false);
tal6.setSelected(false);
tal7.setSelected(false);
tal8.setSelected(false);
tal9.setSelected(false);
tal10.setSelected(false);
tal11.setSelected(false);
tal12.setSelected(false);
tal13.setSelected(false);
tal14.setSelected(false);
tal15.setSelected(false);
tal16.setSelected(false);
tal17.setSelected(false);
tal18.setSelected(false);
tal19.setSelected(false);
tal20.setSelected(false);
tal21.setSelected(false);
tal22.setSelected(false);
tal23.setSelected(false);
tal24.setSelected(false);
tal25.setSelected(false);
tal26.setSelected(false);
tal27.setSelected(false);
tal28.setSelected(false);
tal29.setSelected(false);
tal30.setSelected(false);
tal31.setSelected(false);
tal32.setSelected(false);
tal33.setSelected(false);
tal34.setSelected(false);
tal35.setSelected(false);
tal36.setSelected(false);
//opret en ItemListener for Checkboxes
tal1.addItemListener(this);
tal2.addItemListener(this);
tal3.addItemListener(this);
tal4.addItemListener(this);
tal5.addItemListener(this);
tal6.addItemListener(this);
tal7.addItemListener(this);
tal8.addItemListener(this);
tal9.addItemListener(this);
tal10.addItemListener(this);
tal11.addItemListener(this);
tal12.addItemListener(this);
tal13.addItemListener(this);
tal14.addItemListener(this);
tal15.addItemListener(this);
tal16.addItemListener(this);
tal17.addItemListener(this);
tal18.addItemListener(this);
tal19.addItemListener(this);
tal20.addItemListener(this);
tal21.addItemListener(this);
tal22.addItemListener(this);
tal23.addItemListener(this);
tal24.addItemListener(this);
tal25.addItemListener(this);
tal26.addItemListener(this);
tal27.addItemListener(this);
tal28.addItemListener(this);
tal29.addItemListener(this);
tal30.addItemListener(this);
tal31.addItemListener(this);
tal32.addItemListener(this);
tal33.addItemListener(this);
tal34.addItemListener(this);
tal35.addItemListener(this);
tal36.addItemListener(this);
//Sæt CheckBoxes i 6 kolonner i et Panel
JPanel checkPanel = new JPanel(new GridLayout(0, 6));
checkPanel.add(tal1);
checkPanel.add(tal2);
checkPanel.add(tal3);
checkPanel.add(tal4);
checkPanel.add(tal5);
checkPanel.add(tal5);
checkPanel.add(tal6);
checkPanel.add(tal7);
checkPanel.add(tal8);
checkPanel.add(tal9);
checkPanel.add(tal10);
checkPanel.add(tal11);
checkPanel.add(tal12);
checkPanel.add(tal13);
checkPanel.add(tal14);
checkPanel.add(tal15);
checkPanel.add(tal16);
checkPanel.add(tal17);
checkPanel.add(tal18);
checkPanel.add(tal19);
checkPanel.add(tal20);
checkPanel.add(tal21);
checkPanel.add(tal22);
checkPanel.add(tal23);
checkPanel.add(tal24);
checkPanel.add(tal25);
checkPanel.add(tal26);
checkPanel.add(tal27);
checkPanel.add(tal28);
checkPanel.add(tal29);
checkPanel.add(tal30);
checkPanel.add(tal31);
checkPanel.add(tal32);
checkPanel.add(tal33);
checkPanel.add(tal34);
checkPanel.add(tal35);
checkPanel.add(tal36);
//Set checkpanel størrelse og tilføj det til leftPanel med en ramme
checkPanel.setPreferredSize(new Dimension(290, 290));
leftPanel.add(checkPanel);
setBorder(BorderFactory.createEmptyBorder(20,20,20,20));
//leftPanel med valgte tal
leftPanel.add(labelValg);
labelValg.setPreferredSize(new Dimension(290, 25));
//Tilføj tekster
//topPanel m. nuværende tid
topPanel.add(labelTidNu);
labelTidNu.setPreferredSize(new Dimension(210, 25));
//Hjælpe funktioner til ur
Thread t = new Kalender(labelTidNu); //Bruges til at lave en tråd Thread for Kalender
t.start(); //Tråden t startes og kan kontrolleres med Thread.sleep(1000) = pause
//klargør Knapper til: valgte tal
vOk = new JButton("Tilføj Tal");
vOk.setPreferredSize(new Dimension(100, 50));
vOk.setActionCommand("vOk"); //Set ActionCommand til genkendelse
vOk.addActionListener(this); //Tilføj en Action Listener
//hent uge/kalender
vHent = new JButton("Hent Uge");
vHent.setActionCommand("vHent");
vHent.addActionListener(this);
vHent.setPreferredSize(new Dimension(100, 50));
//Beregn ugens tal
bRegn = new JButton("Beregn");
bRegn.setActionCommand("bRegn");
bRegn.addActionListener(this);
bRegn.setPreferredSize(new Dimension(100, 50));
//Opret et knap Panel
JPanel knapPanel = new JPanel();
knapPanel.setLayout(new BoxLayout(knapPanel, BoxLayout.Y_AXIS));
// knapPanel.setPreferredSize(new Dimension(290, 300));
//opret layoutpaneler med flowlayoutX til knapper og tekst
//layoutPanel1
JPanel layoutPanel1 = new JPanel();
layoutPanel1.setLayout(new FlowLayout(FlowLayout.LEFT));
layoutPanel1.setPreferredSize(new Dimension(290, 150));
//layoutPanel2
JPanel layoutPanel2 = new JPanel();
layoutPanel2.setLayout(new FlowLayout(FlowLayout.RIGHT));
layoutPanel2.setPreferredSize(new Dimension(290, 150));
//Tilføj knapper/tekster
layoutPanel1.add(vHent);
layoutPanel1.add(labelValgTid);
layoutPanel2.add(vOk);
knapPanel.add(layoutPanel1);
// knapPanel.add(fillPanel1);
knapPanel.add(layoutPanel2);
leftPanel.add(knapPanel);
setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
//Opret panel til udlæsning
JPanel listePanel = new JPanel();
listePanel.setLayout(new BoxLayout(listePanel, BoxLayout.Y_AXIS));
listePanel.setPreferredSize(new Dimension(280, 300));
//Opret Panel til Knap
JPanel knapPanel2 = new JPanel();
knapPanel2.setPreferredSize(new Dimension(280, 150));
knapPanel2.setLayout(new FlowLayout(FlowLayout.RIGHT));
//Tilføj lister/knap
listePanel.add(labelUd_1);
listePanel.add(labelUd_2);
listePanel.add(labelUd_3);
listePanel.add(labelUd_4);
listePanel.add(labelUd_5);
listePanel.add(labelUd_6);
listePanel.add(labelUd_7);
listePanel.add(labelUd_8);
listePanel.add(labelUd_9);
listePanel.add(labelUd_10);
rightPanel.add(listePanel);
knapPanel2.add(bRegn);
rightPanel.add(knapPanel2);
} //Frame end
//Lyt til Checkboxes, send resultatet til Valgtjek og opdater display/LabelValg
public void itemStateChanged(ItemEvent e){
// int index = 0;
Object kilde = e.getItemSelectable();
if(kilde == tal1){
Valgtjek(1);
}else if(kilde == tal2){
Valgtjek(2);
}else if(kilde == tal3){
Valgtjek(3);
}else if(kilde == tal4){
Valgtjek(4);
}else if(kilde == tal5){
Valgtjek(5);
}else if(kilde == tal6){
Valgtjek(6);
}else if(kilde == tal7){
Valgtjek(7);
}else if(kilde == tal8){
Valgtjek(8);
}else if(kilde == tal9){
Valgtjek(9);
}else if(kilde == tal10){
Valgtjek(10);
}else if(kilde == tal11){
Valgtjek(11);
}else if(kilde == tal12){
Valgtjek(12);
}else if(kilde == tal13){
Valgtjek(13);
}else if(kilde == tal14){
Valgtjek(14);
}else if(kilde == tal15){
Valgtjek(15);
}else if(kilde == tal16){
Valgtjek(16);
}else if(kilde == tal17){
Valgtjek(17);
}else if(kilde == tal18){
Valgtjek(18);
}else if(kilde == tal19){
Valgtjek(19);
}else if(kilde == tal20){
Valgtjek(20);
}else if(kilde == tal21){
Valgtjek(21);
}else if(kilde == tal22){
Valgtjek(22);
}else if(kilde == tal23){
Valgtjek(23);
}else if(kilde == tal24){
Valgtjek(24);
}else if(kilde == tal25){
Valgtjek(25);
}else if(kilde == tal26){
Valgtjek(26);
}else if(kilde == tal27){
Valgtjek(27);
}else if(kilde == tal28){
Valgtjek(28);
}else if(kilde == tal29){
Valgtjek(29);
}else if(kilde == tal30){
Valgtjek(30);
}else if(kilde == tal31){
Valgtjek(31);
}else if(kilde == tal32){
Valgtjek(32);
}else if(kilde == tal33){
Valgtjek(33);
}else if(kilde == tal34){
Valgtjek(34);
}else if(kilde == tal35){
Valgtjek(35);
}else if(kilde == tal36){
Valgtjek(36);
}
//Opdater og udlæs valgte
String s = valg.toString();
labelValg.setText("Du har valgt: " +s);
}
//Lyt til Knapper //Button Listener
public void actionPerformed(ActionEvent e){
Object kilde = e.getActionCommand();
if(kilde == "vOk"){
System.out.println("Tillykke vOk er Ramt");
}else{
if(kilde == "vHent"){
PopKalender(true); //Call PopUpWindow
System.out.println("Tillykke vHent er ramt"); //This works and "PopKalender" shows on screen
}else {
if(kilde == "bRegn"){
System.out.println("Tillykke der beregnes");
}
else{
if(kilde == "Kill"){
PopKalender(false);
System.out.println("KILL WINDOW"); //This read out works fine, but "PopKalender" dosen't disappear
// System.exit(0); //Also work but NOT as intended !!! :D
}
}
}
} }
//Ur til topPanel
//Der oprettes en klasse
class Kalender extends Thread {
JLabel labelUrOpdater;
Kalender(JLabel labelTidNu){
labelUrOpdater = labelTidNu;
}
//Opret variabler til nutid år, måned, dag i måned, uge, dag, timer, minutter, sek
int year;
int month;
String monthName;
int date;
int dayOfMonth;
int weekOfYear;
int dayOfWeek;
int hour;
int minute;
int second;
String[] måneder = {"Januar", "Februar", "Marts", "April", "Maj", "Juni", "Juli", "August", "September", "Oktober", "November", "December" };
public void run() {
Calendar ur = new GregorianCalendar();
for(;;){
Date trialTime = new Date();
ur.setTime(trialTime);
year = ur.get(Calendar.YEAR);
month = ur.get(Calendar.MONTH);
date = ur.get(Calendar.DATE);
dayOfMonth = ur.get(Calendar.DAY_OF_MONTH);
weekOfYear = ur.get(Calendar.WEEK_OF_YEAR);
dayOfWeek = ur.get(Calendar.DAY_OF_WEEK);
hour = ur.get(Calendar.HOUR_OF_DAY);
minute = ur.get(Calendar.MINUTE);
second = ur.get(Calendar.SECOND);
monthName = måneder[month];
//Sæt 0 foran 0-9 i sekunder/minutter
if((minute <= 9) || (second <= 9)){
if(minute <= 9){
labelTidNu.setText(year + ". " + dayOfMonth + " " + monthName + " " + "Uge: " + weekOfYear + " " + "Kl: " + hour + ":" + "0" + minute + ":" + second);
}else{
if(second <= 9){
labelTidNu.setText(year + ". " + dayOfMonth + " " + monthName + " " + "Uge: " + weekOfYear + " " + "Kl: " + hour + ":" + minute + ":" + "0" + second);
}
}
}
else{
labelTidNu.setText(year + ". " + dayOfMonth + " " + monthName + " " + "Uge: " + weekOfYear + " " + "Kl: " + hour + ":" + minute + ":" + second);
// labelTidNu.repaint();
}
try { Thread.sleep(1000);
} catch(InterruptedException e){
System.out.println("Thread Error");
}
}
}
}
//Tal Checker: Se om de valgte tal er på listen, fjern eller tilføj. Call fra ItemStateChange
public void Valgtjek(int tjek) {
boolean v = valg.contains(tjek);
if(v){
int i = valg.indexOf(tjek);
valg.remove(i);
System.out.println("Fjernede");
}
else{
valg.add(tjek);
System.out.println("valgte :" + tjek);
}
}
//ActionListener for PopUpKalender "PopKalender"/ActionListener f. JPopupMenu
class PopKalValg implements ActionListener{
public void actionPerformed(ActionEvent actionEvent){
System.out.println("Valgt" + actionEvent.getActionCommand());
}
}
//Pop-up til kalender valg (Popup Menu for my Pick Calender
public void PopKalender(boolean pState){
boolean pTest = false;
JPopupMenu popUpKalenderWindow = new JPopupMenu();
// popUpKalenderWindow.setDefaultCloseOperation();
popUpKalenderWindow.setPreferredSize(new Dimension(400, 400));
popUpKalenderWindow.setLocation(700, 300);
ActionListener kalActionValg = new PopKalValg(); //ActionListener to objects inside the JPopupMenu
JPanel popPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); //Panel to hold objects and control layout
JButton dOk = new JButton("OK"); //Not in use, just show
JMenuItem vMenu = new JMenuItem("vMenu Tryk Her"); //test Item to learn JMenuItem
vMenu.addActionListener(kalActionValg);
popPanel.add(vMenu);
JButton kill = new JButton("kill"); //In Use, supposed to shut down JPopupMenu
kill.setActionCommand("Kill");
kill.addActionListener(this);
popPanel.add(dOk);
popPanel.add(kill);
popUpKalenderWindow.add(popPanel);
if(pTest != pState){
popUpKalenderWindow.setVisible(true); //works fine
pTest = true;
System.out.println(pTest); // works fine, state has changed
}else{
// getRootPane().setVisible(false); //Dosen't work
// popPanel.setVisible(false); Dosen't Work
popUpKalenderWindow.setVisible(false); // Dosen't work
System.out.println("Pop set visible false"); //Do work, so loop statement has been reached !!!
}
}
private static void createAndShowGUI(){
//Create and set up window
JFrame frame = new JFrame("Mit Program");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //Afslut Runtime ved vindue luk
frame.setPreferredSize(new Dimension(900, 600)); //Set størrelse på vinduet
/* //Create background, put background in ContentPane place it Center
JLabel bckGnd = new JLabel("");
frame.getContentPane().add(bckGnd, BorderLayout.CENTER);
*/
//Opret et Ground Panel til panels
JComponent groundPanel = new Frame();
groundPanel.setOpaque(true); //content Panes skal være opaque
frame.getContentPane().add(groundPanel); //Tilføj GroundPanel til frame
//Display Window
frame.pack();
frame.setVisible(true);
}
//SerialVersion ???
private static final long serialVersionUID = _1L;
public static void main(String[] args) {
// Schedule a job for event-dispatching thread:
//Creating and showing this Application's GUI.
javax.swing.SwingUtilities.invokeLater(new Runnable(){
public void run(){
createAndShowGUI();
}
});
}
}
확실히 배열 및 기타 모음을 사용하여 배우고 루프를 사용해야합니다. –
하나의 팝업을 보이지 않게 할 수 없다는 것을 보여주기 위해 실제로 36 개의 체크 박스가 필요합니까? –
코드가 눈에 안좋은 데, 배열, 모음, 제네릭을 사용하는 방법을 포함하여 기본 자바를 배우기를 원할 것입니다. –