내 JPanel에서 팝업 이미지를 만들고 싶습니다.자바 스윙 팝업 이미지
는 지금은 이런 일이 :
을하지만,이 같은 것을 얻을 필요가 : 나는 X1을 누른 후
이 될 것입니다. Java에서이 작업을 수행하는 방법은 무엇입니까? Thnx.
내 JPanel에서 팝업 이미지를 만들고 싶습니다.자바 스윙 팝업 이미지
는 지금은 이런 일이 :
을하지만,이 같은 것을 얻을 필요가 : 나는 X1을 누른 후
이 될 것입니다. Java에서이 작업을 수행하는 방법은 무엇입니까? Thnx.
출발점으로, 이와 같은 것이 당신에게 도움이 될 수 있습니다. (아주 빨리 합치고, 부드럽게 말하십시오.) 글래스 패널 접근법이 가장 깨끗하게 보일 것이라고 생각합니다. paintComponent()
메서드에서 정보 풍선에 포인터를 추가하는 방법을 알려 드리겠습니다.보도 X1에 의해
static MyInfoBubble lastBubble;
public static void main(String[] args)
{
JFrame frame = new JFrame();
frame.setSize(new Dimension(500, 500));
JPanel glassPane = new JPanel();
glassPane.setOpaque(false);
glassPane.setLayout(null);
frame.setGlassPane(glassPane);
frame.getGlassPane().setVisible(true);
JPanel labelRowPanel = new JPanel();
for (int ctr = 0; ctr < 7; ctr++) {
labelRowPanel.add(makeButton(frame, "Button " + ctr));
}
frame.getContentPane().add(labelRowPanel);
frame.setVisible(true);
}
private static JButton makeButton(final JFrame frame, final String label) {
final JButton button = new JButton(label);
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0)
{
if (lastBubble != null)
{
lastBubble.setVisible(false);
((JPanel)frame.getGlassPane()).remove(lastBubble);
lastBubble = null;
}
Point loc = button.getLocation();
MyInfoBubble mib = new MyInfoBubble();
mib.setBounds(loc.x+10, loc.y+30, 100, 50);
((JPanel)frame.getGlassPane()).add(mib);
lastBubble = mib;
((JPanel)frame.getGlassPane()).validate();
((JPanel)frame.getGlassPane()).repaint();
}
});
return button;
}
static class MyInfoBubble extends JPanel
{
public MyInfoBubble()
{
setVisible(true);
}
public void paintComponent(Graphics g)
{
Graphics2D g2d = (Graphics2D)g;
g2d.setColor(Color.BLUE);
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2d.fillRoundRect(0, 0, getWidth(), getHeight(), 20, 20);
}
}
같은 메뉴 만들기 :
JPopupMenu popupmenu = new JPopupMenu();
JMenuItem jMenuItem = new JMenuItem(new ImageIcon(getClass().getResource("/topmostpackage/sub/package/s/img.png")));
popupmenu.add(jMenuItem);
그런 다음 해당 버튼에 클릭 핸들러를 추가하고이 같은 메뉴를 보여줍니다 위의 예제가 작동하려면 :
MouseAdapter mouseAdapter = new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
super.mouseClicked(e);
popupmenu.show(button, e.getXOnScreen(), e.getYOnScreen());
}
};
button.addMouseListener(mouseAdapter);
편집을 그렇지 않다면 다음과 같이 읽을 수 있습니다.
URI uri = new URI("file:///home/linski/empty.png");
ImageIcon imageIcon = new ImageIcon(uri.toURL());
그래서, file : // 나는 리눅스 파일 시스템에 이미지의 경로를 넣었다. 윈도우/맥에서 테스트 할 수는 없지만, 브라우저를 통해 이미지를 열고 브라우저 주소 표시 줄에서 올바른 형식의 경로를 읽을 수 있습니다.
EDIT^2 : 풍선 이미지가 메뉴 항목이되고 메뉴가 표시되는 것과 같이이 솔루션은 사용자가 제공 한 이미지와 정확하게 일치하지 않으므로 필요에 맞지 않습니다.
편집^3 :
내가 인스턴스를 대신 JPopupMenu의 인스턴스화, 당신에게이 클래스 빠른 해킹을주지 :
public class CustomMenuItem extends JMenuItem {
public CustomMenuItem(Icon icon) {
super(icon);
}
@Override
protected void paintComponent(Graphics g) {
getIcon().paintIcon(this, g, 0, 0);
}
}
대신 JMenuItem를이 클래스의 인스턴스를 인스턴스화
public class CustomPopUpMenu extends JPopupMenu {
@Override
protected void paintComponent(Graphics g) {}
}
을
그리고 원하는 것을 거의 얻을 수 있습니다. 이것은 "해킹"(해킹이 아니라 "해킹")입니다. 이 아니며이 수행되는 방법입니다. 이를 수행하는 올바른 방법은 JPopUpMenuUI를 커스터마이징하는 것입니다 (아마 그 클래스의 고유 한 서브 클래스를 만드는 것과 결합하여).
나는 당신에게 어떻게 보여줄 수는 없지만 시간이 있자 마자 나는 learn이 될 것이라고 알고있다. 또한 this을 참조하십시오.
+1 흥미로운 질문 : +1
다음과 같은 내용이 있습니다. http://s017.radikal.ru/i408/1210/8f/b88723d1ae85.png 보이지 않는 배경 및 경계가있는 경우 – Val
특정 구성 요소 전체가 아닌 [모양 및 느낌] (http://docs.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html)을 변경하려고합니다 . 그 정도까지는 결코하지 않았고 순수한 재원도 부족했습니다. 나는 현재 내가 그것을 무언가를 얻을 수 있다면 업데이트 할 클래스를 "해킹"하려고하고있다. – linski
, 당신은, 파란색 원 X1 또는를 눌러 X를 클릭 뜻 키보드의 1을 눌러 다음? 또한 X1 이미지 또는 [JButton] (http://docs.oracle.com/javase/6/docs/api/javax/swing/JButton.html)의 하위 클래스 또는 다른 것이 있습니까? – linski
X1, X1을 클릭하십시오 - 아이콘이있는 JLable입니다. – Val
[GlassPane] (http://docs.oracle.com/javase/tutorial/uiswing/components/rootpane.html) 또는 [JLayer/JXLayer] (http://docs.oracle.com/javase)와 같은 것을 사용할 수 있습니다. /tutorial/uiswing/misc/jlayer.html). 그러나 단순화를 위해 JPopupMenu 제안을 좋아합니다.) – MadProgrammer