gpt4 book ai didi

java - Mouslistener 造成问题

转载 作者:行者123 更新时间:2023-12-01 11:30:23 25 4
gpt4 key购买 nike

我在代码中创建了一个 GoInvisible 类,它实现了鼠标监听器,我尝试使用鼠标按下和鼠标释放方法来使我的框架变得透明,然后在按下和释放时恢复正常框架上的按钮。我在内部类中调用这些方法,该内部类实现了处理按钮事件的操作监听器,但由于某种原因,当我运行应用程序时,框架永远不会显示。

这是框架代码;

public class FNAFrame extends JFrame {

public FNAFrame()
{
super ("FNA Comments Generator");
setLayout(new BorderLayout());

setResizable(false);
TextFrame comps = new TextFrame();
add(comps);
pack();
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}


/**
* @param args the command line arguments
*/
public static void main(String[] args) {

SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel("javax.swing.plaf.nimbus.NimbusLookAndFeel");
//
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex)
{
ex.printStackTrace();
}


new FNAFrame();

}
});
}
} // end of class FNA Frame

这是组件类;

public class TextFrame extends JPanel 
{
private JButton Go_Shadow;

public TextFrame()
{
super(new GridBagLayout());

setPreferredSize(new Dimension(300,200));
setBackground(Color.white);

init();
} // end of class constructor

private void init()
{
GridBagConstraints gbc = new GridBagConstraints();
gbc.insets = new Insets(10,10,10,10);

// button to display date in textarea
Go_Shadow = new JButton("Shadow");
gbc.gridx = 0;
gbc.gridy = 1;
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.anchor = GridBagConstraints.WEST;
add(Go_Shadow, gbc);


// adding listeners to components
// registering all components with their respective listeners
CompHandler compHandler = new CompHandler();
Go_Shadow.addActionListener(compHandler);
}

// class to handle text fields
private class CompHandler implements ActionListener
{
private MouseEvent me;

@Override
public void actionPerformed(ActionEvent e)
{
Object button_command = e.getActionCommand();



if (button_command.equals("Go_Shadow"))
{
GoInvisible invisy = new GoInvisible();

invisy.mousePressed(me);
invisy.mouseReleased(me);
}

}
} // end component handler class
} // end of TextFrame class

这是鼠标监听器类

 public class GoInvisible implements MouseListener {


FNAFrame Parentpane = new FNAFrame();
TextFrame compPanel = new TextFrame();


@Override
public void mouseClicked(MouseEvent e) {

throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}

@Override
public void mousePressed(MouseEvent e) {
Parentpane.setUndecorated(true);
Parentpane.setOpacity(0.5f);
compPanel.setOpaque(true);
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}

@Override
public void mouseReleased(MouseEvent e) {
Parentpane.setUndecorated(false);
compPanel.setOpaque(true);
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}

@Override
public void mouseEntered(MouseEvent e) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}

@Override
public void mouseExited(MouseEvent e) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
}

最佳答案

有一系列问题......

  1. 您需要从您的方法中删除 throw new UnsupportedOperationException("Not support Yet.");,这些会导致问题并阻止您的代码执行
  2. 按钮的 actionCommand 不是“Go_Shadow”,它将是按钮的文本,除非您另外指定。
  3. 您不应使用 MouseListenerActionListener 添加,而应监控 ButtonModel 的状态
  4. 您正在 GoInvisible 处理程序中创建 FNAFrameTextFrame 的新实例,这些实例与实际位于屏幕!

相反,您应该监视 ButtonModel 的状态,例如...

Go_Shadow.getModel().addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
ButtonModel model = (ButtonModel) e.getSource();
JFrame window = (JFrame) SwingUtilities.getWindowAncestor(TextFrame.this);
if (model.isArmed() && model.isPressed()) {
window.setUndecorated(true);
window.setOpacity(0.5f);
setOpaque(false);
} else if (model.isArmed() && !model.isPressed()) {
setOpaque(true);
window.setOpacity(1f);
window.setUndecorated(false);
}
}
});

但是,您仍然会发现这会导致问题,因为框架边框的状态一旦显示就无法更改

例如,更好的解决方案可能是使用 JToggleButton

public class TextFrame extends JPanel {

private JToggleButton Go_Shadow;

public TextFrame() {
super(new GridBagLayout());

setPreferredSize(new Dimension(300, 200));
setBackground(Color.white);

init();
} // end of class constructor

private void init() {
GridBagConstraints gbc = new GridBagConstraints();
gbc.insets = new Insets(10, 10, 10, 10);

// button to display date in textarea
Go_Shadow = new JToggleButton("Shadow");
gbc.gridx = 0;
gbc.gridy = 1;
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.anchor = GridBagConstraints.WEST;
add(Go_Shadow, gbc);

// adding listeners to components
// registering all components with their respective listeners
Go_Shadow.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JFrame window = (JFrame) SwingUtilities.getWindowAncestor(TextFrame.this);
Point location = window.getLocation();
if (Go_Shadow.isSelected()) {
window.dispose();
window.setUndecorated(true);
window.setOpacity(0.5f);
setOpaque(false);
} else {
window.dispose();
window.setOpacity(1f);
window.setUndecorated(false);
setOpaque(true);
}
window.setLocation(location);
window.setVisible(true);
}
});

}

} // end of TextFrame class

您可能想通读Code Conventions for the Java TM Programming Language ,这将使人们更容易阅读您的代码,也让您更轻松地阅读其他人

关于java - Mouslistener 造成问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30447552/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com