- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在玩 JME3,目前面临以下问题:
当 LWJGL Canvas 包含在应用程序的多个选项卡中时,没有一个或只运行 1 次。
这是一个例子:
SwingCanvas.java:
package jme3test.helloworld;
import java.awt.Dimension;
import javax.swing.JFrame;
import com.jme3.app.SimpleApplication;
import com.jme3.material.Material;
import com.jme3.math.ColorRGBA;
import com.jme3.scene.Geometry;
import com.jme3.scene.shape.Box;
import com.jme3.system.AppSettings;
import com.jme3.system.JmeCanvasContext;
public class SwingCanvas extends SimpleApplication {
private void SwingCanvasTest() {
SwingCanvas app = new SwingCanvas();
app.start();
}
@Override
public void simpleInitApp() {
// activate windowed input behaviour
flyCam.setDragToRotate(true);
Box box = new Box(2, 2, 2);
Geometry geom = new Geometry("Box", box);
Material mat = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
mat.setColor("Color", ColorRGBA.Blue);
geom.setMaterial(mat);
rootNode.attachChild(geom); // make the cube appear in the scene
}
public JmeCanvasContext createJMEcanvas(){
AppSettings settings = new AppSettings(true);
settings.setWidth(640);
settings.setHeight(480);
this.setSettings(settings);
this.createCanvas(); // create canvas!
JmeCanvasContext ctx = (JmeCanvasContext) this.getContext();
ctx.setSystemListener(this);
Dimension dim = new Dimension(640, 480);
ctx.getCanvas().setPreferredSize(dim);
return ctx;
}
public static void main(String[] args) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
SwingCanvas canvasApplication = new SwingCanvas();
JFrame window = new JFrame("Swing Application");
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.add(canvasApplication.createJMEcanvas().getCanvas());
window.pack();
window.setVisible(true);
canvasApplication.start();
}
});
}
}
SwingApplicationJME.java:
package jme3test.helloworld;
import java.awt.BorderLayout;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JSplitPane;
import javax.swing.JTabbedPane;
import javax.swing.SwingUtilities;
import com.jme3.system.JmeCanvasContext;
public class SwingApplicationJME {
public SwingApplicationJME(){
JFrame frame = new JFrame("JME Swing Application");
frame.setSize(800, 600);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(getLayout());
frame.setVisible(true);
}
private JComponent getLayout(){
JTabbedPane tabbedPane = new JTabbedPane();
SwingCanvas canvas1 = new SwingCanvas();
SwingCanvas canvas2 = new SwingCanvas();
SwingCanvas canvas3 = new SwingCanvas();
JmeCanvasContext ctx1 = canvas1.createJMEcanvas();
JmeCanvasContext ctx2 = canvas2.createJMEcanvas();
JmeCanvasContext ctx3 = canvas3.createJMEcanvas();
JPanel JME_panel_1 = new JPanel(new BorderLayout());
JME_panel_1.add(new JButton("WEST"), BorderLayout.WEST);
JME_panel_1.add(new JButton("NORTH"), BorderLayout.NORTH);
JME_panel_1.add(new JButton("EAST"), BorderLayout.EAST);
JME_panel_1.add(new JButton("SOUTH"), BorderLayout.SOUTH);
JME_panel_1.add(ctx1.getCanvas(), BorderLayout.CENTER);
JPanel JME_panel_2 = new JPanel();
JSplitPane splitPaneVertical = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
splitPaneVertical.add(new JButton("Vertical Button"), JSplitPane.LEFT);
splitPaneVertical.add(ctx2.getCanvas(), JSplitPane.RIGHT);
JME_panel_2.add(splitPaneVertical);
JPanel JME_panel_3 = new JPanel();
JSplitPane splitPaneHorizontal = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
splitPaneHorizontal.add(new JButton("Horizontal Button"), JSplitPane.TOP);
splitPaneHorizontal.add(ctx3.getCanvas(), JSplitPane.BOTTOM);
JME_panel_3.add(splitPaneHorizontal);
tabbedPane.add(JME_panel_1, "JME border panel");
tabbedPane.add(JME_panel_2, "JME vetical split panel");
tabbedPane.add(JME_panel_3, "JME horizontal split panel");
return tabbedPane;
}
public static void main(String [] s){
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
SwingApplicationJME app = new SwingApplicationJME();
}
});
}
}
任何想法请=)
最佳答案
在jmonkeyengine文档上找到了一个方便的解决方案:Monkey canvas + Swing GUI
代码引用如下:
final JMenuItem itemSwitchTab = new JMenuItem("Switch to tab #2");
menuTortureMethods.add(itemSwitchTab);
itemSwitchTab.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
if (itemSwitchTab.getText().equals("Switch to tab #2")){
canvasPanel1.remove(canvas);
canvasPanel2.add(canvas, BorderLayout.CENTER);
currentPanel = canvasPanel2;
itemSwitchTab.setText("Switch to tab #1");
}else if (itemSwitchTab.getText().equals("Switch to tab #1")){
canvasPanel2.remove(canvas);
canvasPanel1.add(canvas, BorderLayout.CENTER);
currentPanel = canvasPanel1;
itemSwitchTab.setText("Switch to tab #2");
}
}
});
我们只需要从一个选项卡中删除 Canvas 并添加到另一个选项卡即可。
关于java - JME 3 + Swing,多 Canvas ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10129576/
在 JME 中,我尝试使用线程,但是当我运行程序时,该函数永远不会启动。 我有一个服务器套接字正在监听来自 Netbeans 的输入。 监听器 while (isRunning) {
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the he
我目前正在使用 JME-Jbullet 物理引擎,但我的地形有问题。 我有 2 个扁平盒子,一个用于地板,一个用作坡道。问题如下: 使用以下代码: Box slope = new Box("Slope
我刚刚开始使用 jME,并在 Blender 中创建了一个 3D 模型,并将其导出到 .obj 并将其导入到我的 jME 应用程序中。环境光工作正常,但我使用的直射光只能照亮几个面,但它不是只照亮物体
我正在尝试在 j2me 中创建一个带有拆分文本的数组。我正在尝试使用来自 ostermiller.org 的 StringTokenizer 类。但是我不知道如何将标记分配到数组中。这段代码可能有什么
是否可以移植现有的图形引擎,如 jMonkeyEngine类似 GwtGL或gwt-g3d ?它只是将原生 OpenGL 调用替换为 WebGL 调用还是还有更多? 最佳答案 事情可能不止这些。看看t
我正在使用 j Monkey Engine 3 构建自定义体素引擎。在 Block.java 类中,我创建了一个几何对象数组,我想为其分配四边形网格。此代码返回空指针异常: faces = n
我想为 3d 游戏编写代码,但我不知道我需要 JME 还是 J2ME,请帮助我!谢谢。 最佳答案 这里的答案似乎有些困惑。 JME是 jMonkey Engine 框架的缩写,它是“一个高性能的、基于
是否可以在JME3 Canvas 中添加Swing组件?如果可能,请分享逻辑。我能够以相反的方式实现我能够在 Swing 中集成 JME3 Canvas 。 最佳答案 不,您不能将 Swing 组件添
我正在玩 JME3,目前面临以下问题: 当 LWJGL Canvas 包含在应用程序的多个选项卡中时,没有一个或只运行 1 次。 这是一个例子: SwingCanvas.java: package j
我有一个在三星 i617 手机上运行的 JME 应用程序,当它的堆超过 7.1 MB(而手机有 64 mb)时,应用程序抛出 OutOfMemoryError... 是否可以在JME中使用-Xmx和-
MIDP 和 JME 有什么区别? 两者与 Android 有什么关系?据我了解,Android 不支持 JME - 对吗? 谢谢 最佳答案 MIDP 代表 Mobile Information De
我需要一些帮助才能开始。 我需要知道如何调用REST 服务 和解析xml。 我的 php 脚本只发回一些 xmlcode,没有别的。(没有 wsdl 或 uddi) 诺基亚 5800 的平台是S60
我的问题是: 我在 Cinema 4d 中制作了一个带有纹理的 3D 模型(类似于这个:http://preview.turbosquid.com/Preview/2011/03/30__13_54_
请看下面的代码 首先,请注意我是 Java Mobile 的 100% 新手。 在这里,当用户单击按钮时,我会点亮并振动。但是,我真的很想创建一个 SOS 应用程序,它可以在线程中将整个屏幕变成白色,
Closed. This question is opinion-based。它当前不接受答案。 想要改善这个问题吗?更新问题,以便editing this post用事实和引用来回答。 7年前关闭。
从标题看问题就很清楚了。 是否有适用于 Mac OS X 或 Linux 的 Java Micro Edition SDK?或者是否需要 Windows XP 来开发 JME 应用程序? 最佳答案 没
我是一名优秀的程序员,十分优秀!