이있다. 그러나 이것은 구성 요소 위의 새로운 최상위 창에서 팝업되므로 둥근 테두리가 최상위 창 상단에 그려집니다. 그것은 둥근 테두리가있는 상단에 그려진 JScrollPane
을 가진 회색 사각형처럼 보입니다.
그럼 주위에 둥근 테두리를 그릴 수있는 Panel
에 ScrollPane
을 넣는 방법을 생각했습니다. 아쉽게도 AWT 구성 요소에는 Swing 구성 요소처럼 setOpaque()
속성이 없으므로 사각형입니다. 부모와 동일한 배경색을 복사 할 수 있지만 일부 데이터 위에 표시하려는 경우 꽤 분명합니다.
마침내 내놓은 절충적인 접근 방식은 Container
구성 요소가 ScrollPane
자식 주위에 테두리를 그렸습니다. 이 해킹-Y 솔루션의 확실히 더이지만, 지금까지 그 일 것 유일한 사람입니다 ... 여기에 마지막 코드입니다 :
package stackoverflow;
import java.awt.Color;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.List;
import java.awt.Panel;
import java.awt.Rectangle;
import java.awt.ScrollPane;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class CanvasPopup {
public static void main(String[] args) {
final Frame f = new Frame("CanvasPopup");
final ScrollPane scroll = new ScrollPane();
final Panel c = new Panel(null) {
@Override
public void paint(Graphics g) {
g.setColor(Color.GREEN);
g.fillRect(0, 0, getWidth(), getHeight());
if (scroll.isVisible()) {
g.setColor(Color.RED);
Rectangle bounds = scroll.getBounds();
g.fillRoundRect(bounds.x - 10, bounds.y - 10,
bounds.width + 20, bounds.height + 20, 15, 15);
}
}
};
final List list = new List();
for (int i = 0; i<100; i++) {
list.add("Item " + i);
}
scroll.add(list);
scroll.setBounds(75, 75, 150, 150);
scroll.setVisible(false);
c.add(scroll);
c.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
if (!scroll.isVisible()) {
scroll.setLocation(e.getPoint());
}
scroll.setVisible(!scroll.isVisible());
c.repaint();
}
});
f.add(c);
f.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
f.setSize(300, 300);
f.setLocationRelativeTo(null);
f.setVisible(true);
}
}
당신은 귀하의 의견 중 하나에 팝업을 언급 한이 - 당신이 추가 정보를 제공 할 수 있습니까? 팝업 메뉴? JPopupMenu? Popup/PopupFactory? – Nate
내 응용 프로그램에서 디스플레이의 항목을 클릭 할 수 있습니다. 항목을 클릭하면 정보가 팝업됩니다. 많은 정보가있을 수 있으므로 스크롤 창에 넣고 싶습니다. 클릭 한 항목은 3D 캔버스에 있어야하므로 항목에 대한 스크롤 가능한 텍스트를 표시하려고합니다. 이상적으로 나는 "둥근"효과를주기 위해 팝업 테두리를 사용자 정의하고 싶습니다. –
글쎄, 당신이 원하는 것을 설명했다 -하지만 어떤 유형의 구성 요소/클래스가 팝업을 생성하는 데 사용되는지 모르므로 내가 원하는 것을 결정할 수 없다. 3D 캔버스에 직접 칠하거나 이전 주석에서 언급 한 클래스 중 하나를 사용할 수 있습니다 ... 팝업이 시작되는 코드가 있습니까? 또는 팝업 내용을 어떻게 제공합니까? – Nate