所以我的框架中有几个 Jpanels,其想法是,当选择其中一个面板时,它将突出显示。这只是第一步,因为最后,我希望能够在面板上使用按钮,但只有突出显示的按钮。
我想我想要在面板上使用某种鼠标监听器,但我不确定如何实现它以获得我想要的结果。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.Border;
public class CustomComponent {
Border emptyBorder = BorderFactory.createEmptyBorder(1,1,1,1);
Border selectBorder = BorderFactory.createLineBorder(Color.blue);
JPanel[] panels;
private JPanel getContent() {
JLabel label = new JLabel();
label.setText("fffffffff");
label.setBounds(5, 5, 25, 25);
JLabel label2 = new JLabel();
label2.setText("HHHHHHHHHH");
label2.setBounds(25, 25, 25, 25);
JLabel label3 = new JLabel();
label3.setText("YYYYYYYY");
label3.setBounds(50, 50, 25, 25);
JPanel mainPanel = new JPanel();
mainPanel.setSize(new Dimension(300,300));
JPanel panel1 = new JPanel();
panel1.add(label);
JPanel panel2 = new JPanel();
panel2.add(label2);
JPanel panel3 = new JPanel();
panel3.add(label3);
panel1.setBackground(Color.WHITE);
panel2.setBackground(Color.MAGENTA);
panel3.setBackground(Color.orange);
panel1.setBorder(emptyBorder);
panel2.setBorder(emptyBorder);
panel3.setBorder(emptyBorder);
panels = new JPanel[] { panel1, panel2, panel3 };
mainPanel.add(panel1);
mainPanel.add(panel2);
mainPanel.add(panel3);
return mainPanel;
}
public static void main(String[] args) {
JFrame frame = new JFrame("Test");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new CustomComponent().getContent());
frame.pack();
frame.setVisible(true);
}
}
最佳答案
下面是一个示例代码,展示了如何在鼠标悬停在JPanel
之一上时实现突出显示。 。如果您想在单击而不是悬停时突出显示,请实现 mousePressed
和mouseReleased
方法而不是 mouseEntered
和mouseExited
import javax.swing.*;
import javax.swing.border.Border;
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
public class MouseHoverDemo
{
public static void main(String[] args)
{
new MouseHoverDemo();
}
MouseHoverDemo()
{
JFrame jFrame = new JFrame("Mouse Hover Demo");
jFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
jFrame.setLayout(new GridLayout(5,5));
for(int i=0;i<25;i++) jFrame.add(new CustomPanel());
jFrame.pack();
jFrame.setLocationRelativeTo(null);
jFrame.setVisible(true);
}
class CustomPanel extends JPanel implements MouseListener
{
Border blackBorder = BorderFactory.createLineBorder(Color.BLACK);
Border redBorder = BorderFactory.createLineBorder(Color.RED,5);
CustomPanel()
{
addMouseListener(this);
setBorder(blackBorder);
setFocusable(true);
}
@Override
public Dimension getPreferredSize()
{
return new Dimension(50, 50);
}
@Override public void mouseClicked(MouseEvent e){}
@Override public void mousePressed(MouseEvent e){}
@Override public void mouseReleased(MouseEvent e){}
@Override
public void mouseEntered(MouseEvent e)
{
setBorder(redBorder);
}
@Override
public void mouseExited(MouseEvent e)
{
setBorder(blackBorder);
}
}
}
<小时/>
更新
对于您新需要的功能,请更改代码 customPanel
对此
class CustomPanel extends JPanel implements MouseListener
{
boolean isHighlighted;
Border blackBorder = BorderFactory.createLineBorder(Color.BLACK);
Border redBorder = BorderFactory.createLineBorder(Color.RED,5);
CustomPanel()
{
addMouseListener(this);
setBorder(blackBorder);
setFocusable(true);
}
@Override
public Dimension getPreferredSize()
{
return new Dimension(200, 100);
}
@Override public void mouseClicked(MouseEvent e)
{
if(isHighlighted) setBorder(blackBorder);
else setBorder(redBorder);
isHighlighted=!isHighlighted;
}
@Override public void mousePressed(MouseEvent e){}
@Override public void mouseReleased(MouseEvent e){}
@Override public void mouseEntered(MouseEvent e){}
@Override public void mouseExited(MouseEvent e){}
}
关于java - 让 JPanel 在单击时突出显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16747022/