我知道我在这里做错了但我无法弄清楚是什么。我想用方法将两个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();
我感觉这与静态方法有关,但是当我使方法不是静态时,它说我无法改变可见性。
答案 0 :(得分:0)
您是否记得调用该函数隐藏事件调度线程(EDT)中的按钮?
这是一个完全包含的工作示例,我调用一种方法来隐藏另一个对象的按钮。请注意,它是在EDT中完成的(使用SwingUtilities):
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;
}
}