Java 如何使用单独的方法隐藏JButton并在新类中调用

Java 如何使用单独的方法隐藏JButton并在新类中调用,java,Java,我知道我做错了什么,但我不知道是什么。我想用一个方法将两个jbutton的可见性设置为false,用另一个方法将其设置为true。然后我想调用另一个类中的方法。我做错了什么 private static JButton draw; private static JButton pick; private JTextField tf; public gui() { super("title"); setLayout(new FlowLayout()); draw =

我知道我做错了什么,但我不知道是什么。我想用一个方法将两个jbutton的可见性设置为false,用另一个方法将其设置为true。然后我想调用另一个类中的方法。我做错了什么

private static JButton draw;
private static JButton pick;
private JTextField tf;

public gui() {

    super("title");
    setLayout(new FlowLayout());


    draw = new JButton("Draw"); //makes a new button to click.
    draw.addActionListener( //MAKES NEW INNER CLASS TO DEFINE WHAT draw DOES

                new ActionListener() {

                    public void actionPerformed(ActionEvent event) { //checks if clicked. 

                        draw.setVisible(false);
                        pick.setVisible(false);
                        cards.select = 0;
                        System.out.println(cards.select);

                    }

                }

            );



    pick = new JButton("Pick"); //makes a new button to click.
    pick.addActionListener( //MAKES NEW INNER CLASS TO DEFINE WHAT pick DOES

                new ActionListener() {

                    public void actionPerformed(ActionEvent event) { //checks if clicked. 

                        pick.setVisible(false);
                        draw.setVisible(false);

                        cards.select = 1;
                        System.out.println(cards.select);

                    }

                }

            );

    tf = new JTextField("lol", 20); //sets size and text

    add(tf);
    add(draw);
    add(pick);


}

public static void addDP() {
    pick.setVisible(true);
    draw.setVisible(true);

}

public static void removeDP() {
    pick.setVisible(false);
    draw.setVisible(false); 
}
类调用该方法:

        gui add = new gui();
        add.addDP();

我觉得这与静态方法有关,但当我将该方法设置为非静态时,它会说我无法更改可见性。

您是否记得调用该函数以隐藏事件调度线程(EDT)中的按钮

下面是一个完整的工作示例,我调用一个方法来隐藏另一个对象的按钮。请注意,它是在EDT内部完成的(使用SwingUtilities):


你也能为我们提供来电者课程吗?谢谢!不过我现在有一个新问题。在主方法中,HideButtonGui=new HideButtonGui()之后;gui.go();-我想运行更多的代码,但它无法运行。为什么呢?(对不起,我是JFrame的新手)我有一个完整的名为“cards”的程序来运行纸牌游戏。它定义int、makewhile循环等。我之所以制作这个GUI是为了纸牌游戏。
import javax.swing.*;
import java.util.concurrent.TimeUnit;

public class HideButtonGui
{
    private JFrame myFrame;
    private PanelWithButtons comp;

    public HideButtonGui() {
        setupGui();
    }

    private void setupGui() {
        myFrame = new JFrame();
        comp = new PanelWithButtons();

        myFrame.getContentPane().add(comp.getPanel());
        myFrame.setSize(400, 300);
        myFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    }


    public static void main(String[] args) {
        HideButtonGui gui = new HideButtonGui();
        gui.go();
    }

    public void go() {
        SwingUtilities.invokeLater(() -> myFrame.setVisible(true));

        try {
            TimeUnit.SECONDS.sleep(5);

            /*
                This is me calling a function from another class.
                That function hides the buttons.
                Notice that all interaction with GUI elements is done
                in the Event Dispatch Thread.
            */
            SwingUtilities.invokeLater(() -> comp.hideButtons());
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}


class PanelWithButtons {
    private JButton drawBtn;
    private JButton pickBtn;
    private JPanel myPanel;

    private int count = 0;

    public PanelWithButtons() {
        setupGui();
    }

    private void setupGui() {
        drawBtn = new JButton("Draw");
        pickBtn = new JButton("Pick");

        myPanel = new JPanel();
        myPanel.add(drawBtn);
        myPanel.add(pickBtn);

        drawBtn.addActionListener(evt -> hideButtonClicked());
        pickBtn.addActionListener(evt -> pickButtonClicked());
    }

    private void pickButtonClicked() {
        hideButtons();
        count = 1;
        System.out.println(count);
    }

    private void hideButtonClicked() {
        hideButtons();
        count = 0;
        System.out.println(count);
    }

    public void hideButtons() {
        drawBtn.setVisible(false);
        pickBtn.setVisible(false);
    }

    public void showButtons() {
        drawBtn.setVisible(true);
        pickBtn.setVisible(true);
    }


    public JPanel getPanel() {
        return myPanel;
    }
}