Java 对于JPOppMenu来说,该区域是否太小?
在最后一个问题中,我问社区为什么我的Java 对于JPOppMenu来说,该区域是否太小?,java,swing,popup,jframe,jpopupmenu,Java,Swing,Popup,Jframe,Jpopupmenu,在最后一个问题中,我问社区为什么我的jpopmpmenu没有出现在屏幕上。 我无法想出一个简单、可运行、可编译的示例。 下面是我为你们做的: 区域是否太小,无法绘制弹出窗口? 我希望我的弹出窗口如下: 我所做的代码在第一张照片中可见 代码: 完整的代码可以是 编辑2 我将各种JRadioButtonMenuItem和setupJPopup()复制到一个新文件中并运行。它起作用了。为什么在ScreenRecorder类中不起作用? 代码 包装演示 import java.awt.event.Mo
jpopmpmenu
没有出现在屏幕上。我无法想出一个简单、可运行、可编译的示例。
下面是我为你们做的:
我希望我的弹出窗口如下:
我所做的代码在第一张照片中可见 代码: 完整的代码可以是 编辑2 我将各种
JRadioButtonMenuItem
和setupJPopup()
复制到一个新文件中并运行。它起作用了。为什么在ScreenRecorder类中不起作用?
代码
包装演示
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.ButtonGroup;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;
import javax.swing.JRadioButtonMenuItem;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
public class PopupTrial {
public PopupTrial(){
setupJPopup();
JFrame frame = new JFrame();
try{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}catch(Exception e){
}
frame.getContentPane().add(label);
label.addMouseListener(new MouseAdapter(){
@Override
public void mouseClicked(MouseEvent e){
popup.show(e.getComponent(), e.getX(), e.getY());
}
});
frame.setVisible(true);
frame.setSize(300, 300);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable(){
@Override
public void run(){
new PopupTrial();
}
});
}
public void setupJPopup(){
encodingGroup.add(avi);
encodingGroup.add(quicktime);
popup.add(avi);
popup.add(quicktime);
popup.addSeparator();
recordingAreaGroup.add(entireScreen);
recordingAreaGroup.add(custom);
popup.add(entireScreen);
popup.add(custom);
popup.addSeparator();
cursorGroup.add(selectBlackCursor);
cursorGroup.add(selectWhiteCursor);
cursorGroup.add(selectNoCursor);
selectCursor.add(selectBlackCursor);
selectCursor.add(selectWhiteCursor);
selectCursor.add(selectNoCursor);
popup.add(selectCursor);
popup.pack();
}
JLabel label = new JLabel("Click Me");
ButtonGroup recordingAreaGroup = new ButtonGroup();
ButtonGroup cursorGroup = new ButtonGroup();
ButtonGroup encodingGroup = new ButtonGroup();
JPopupMenu popup = new JPopupMenu();
JRadioButtonMenuItem avi = new JRadioButtonMenuItem("AVI",true);
JRadioButtonMenuItem quicktime = new JRadioButtonMenuItem("QuickTime",false);
JRadioButtonMenuItem entireScreen = new JRadioButtonMenuItem("Entire Screen",true);
JRadioButtonMenuItem custom = new JRadioButtonMenuItem("Custom...",false);
JMenuItem selectCursor = new JMenu("Select a cursor");
JRadioButtonMenuItem selectWhiteCursor = new JRadioButtonMenuItem("White Cursor",true);
JRadioButtonMenuItem selectBlackCursor = new JRadioButtonMenuItem("Black Cursor",false);
JRadioButtonMenuItem selectNoCursor = new JRadioButtonMenuItem("No Cursor",false);
}
否,
JFrame
的大小与为什么不显示PopupMenu
无关。下面是一个示例,展示了与您想要的(并使用类似方法)类似的工作方式:
import java.awt.*;
导入java.awt.event.*;
导入javax.swing.*;
公共类弹出菜单扩展框{
尺寸首选尺寸=新尺寸(400,30);
公共弹出菜单(){
超级(Y_轴框布局);
最终JPopupMenu菜单=新的JPopupMenu(“选项”);
对于(int i=1;i<20;i++)
添加(新项目(“选项”+i));
JLabel clickMe=新的JLabel(“clickMe”);
单击me.setAlignmentX(右对齐);
clickMe.addMouseListener(新的MouseAdapter(){
@凌驾
公共无效mouseClicked(MouseEvent e){
show(e.getComponent(),e.getX(),e.getY());
}});
添加(单击我);
}
公共维度getPreferredSize(){
返回首选大小;
}
公共静态void main(字符串[]args){
JFrame=新JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setContentPane(新的弹出菜单());
frame.validate();
frame.pack();
frame.setVisible(true);
}
}
截图中没有与jpopmenu相关的代码
@LittleChild:请发布代码,而不是截图;sscce是最好的;我在下面引用了一些作为参考。@trashgood:这是答案Stack Stuff->Prorotype->src->demo->Screen Recorder.txt
@trashgood我将相同的代码复制到一个新文件中,编译并运行。是的。我不知道为什么它不会在我的屏幕记录器中运行这里有几种方法可以使重新分解在项目中留下过时的类文件;完整的构建是权宜之计。框+1;DYM单击me.setAlignmentX(右对齐)
和添加(Box.createHorizontalGlue())
?@trashgood-oyvey!今天早上我太累了,我想不出对齐的正确语法(尽管我已经使用了数百次),忘记在发布之前进行尝试。感谢您的帮助-我修复了代码(我主要是在寻找alignmentX)。
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.ButtonGroup;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;
import javax.swing.JRadioButtonMenuItem;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
public class PopupTrial {
public PopupTrial(){
setupJPopup();
JFrame frame = new JFrame();
try{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}catch(Exception e){
}
frame.getContentPane().add(label);
label.addMouseListener(new MouseAdapter(){
@Override
public void mouseClicked(MouseEvent e){
popup.show(e.getComponent(), e.getX(), e.getY());
}
});
frame.setVisible(true);
frame.setSize(300, 300);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable(){
@Override
public void run(){
new PopupTrial();
}
});
}
public void setupJPopup(){
encodingGroup.add(avi);
encodingGroup.add(quicktime);
popup.add(avi);
popup.add(quicktime);
popup.addSeparator();
recordingAreaGroup.add(entireScreen);
recordingAreaGroup.add(custom);
popup.add(entireScreen);
popup.add(custom);
popup.addSeparator();
cursorGroup.add(selectBlackCursor);
cursorGroup.add(selectWhiteCursor);
cursorGroup.add(selectNoCursor);
selectCursor.add(selectBlackCursor);
selectCursor.add(selectWhiteCursor);
selectCursor.add(selectNoCursor);
popup.add(selectCursor);
popup.pack();
}
JLabel label = new JLabel("Click Me");
ButtonGroup recordingAreaGroup = new ButtonGroup();
ButtonGroup cursorGroup = new ButtonGroup();
ButtonGroup encodingGroup = new ButtonGroup();
JPopupMenu popup = new JPopupMenu();
JRadioButtonMenuItem avi = new JRadioButtonMenuItem("AVI",true);
JRadioButtonMenuItem quicktime = new JRadioButtonMenuItem("QuickTime",false);
JRadioButtonMenuItem entireScreen = new JRadioButtonMenuItem("Entire Screen",true);
JRadioButtonMenuItem custom = new JRadioButtonMenuItem("Custom...",false);
JMenuItem selectCursor = new JMenu("Select a cursor");
JRadioButtonMenuItem selectWhiteCursor = new JRadioButtonMenuItem("White Cursor",true);
JRadioButtonMenuItem selectBlackCursor = new JRadioButtonMenuItem("Black Cursor",false);
JRadioButtonMenuItem selectNoCursor = new JRadioButtonMenuItem("No Cursor",false);
}
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class PopupMenu extends Box{
Dimension preferredSize = new Dimension(400,30);
public PopupMenu(){
super(BoxLayout.Y_AXIS);
final JPopupMenu menu = new JPopupMenu("Options");
for(int i = 1; i < 20; i++)
menu.add(new JMenuItem("Option" + i));
JLabel clickMe = new JLabel("ClickMe");
clickMe.setAlignmentX(RIGHT_ALIGNMENT);
clickMe.addMouseListener(new MouseAdapter(){
@Override
public void mouseClicked(MouseEvent e) {
menu.show(e.getComponent(), e.getX(), e.getY());
}});
add(clickMe);
}
public Dimension getPreferredSize(){
return preferredSize;
}
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setContentPane(new PopupMenu());
frame.validate();
frame.pack();
frame.setVisible(true);
}
}