为什么根据平台(Windows/Linux)和语言(Java/Jython),我会从JComboBox获得非常不同的行为
我正在编写一个最终将在Linux上运行的Jython应用程序。我在Windows机器上开发,在Linux上测试时,我的行为变得不一致为什么根据平台(Windows/Linux)和语言(Java/Jython),我会从JComboBox获得非常不同的行为,java,linux,swing,cross-platform,jython,Java,Linux,Swing,Cross Platform,Jython,我正在编写一个最终将在Linux上运行的Jython应用程序。我在Windows机器上开发,在Linux上测试时,我的行为变得不一致 开发机器-Windows XP、Java 6、Jython 2.5.2 测试机-Red Hat 3.4.3、Java 6、Jython 2.5.2 在Windows中,使用java或jython,我得到了我认为是“正常”的JCOMBOX行为: 单击文本或箭头,列表将下拉 单击所需项目,即可进行选择 在Linux上,我从Java获得以下行为: 单击并按住,列表将
- 开发机器-Windows XP、Java 6、Jython 2.5.2
- 测试机-Red Hat 3.4.3、Java 6、Jython 2.5.2
- 组合框本身呈现在窗口中它应该出现的位置,但是我单击,列表从屏幕左上角下拉,或者
- 当我单击并按住时,列表会呈现在正确的位置,但我必须将鼠标拖动到左上角才能进行选择,就好像列表仍然从那里往下掉一样
package foo;
import javax.swing.*;
import java.awt.*;
public class Foo extends JPanel{
public Foo(){
super(new BorderLayout());
String[] contents = {"Foo", "Bar", "Baz"};
JComboBox combo = new JComboBox(contents);
add(combo, BorderLayout.PAGE_START);
}
private static void BuildAndShow(){
JFrame mainWindow = new JFrame("Testing");
mainWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//Create and set up the content pane.
JComponent contentPane = new Foo();
contentPane.setOpaque(true); //content panes must be opaque
mainWindow.setContentPane(contentPane);
//Display the window.
mainWindow.pack();
mainWindow.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
BuildAndShow();
}
});
}
}
这是我的Jython SSCCE:
from java.lang import Runnable
from javax.swing import SwingUtilities, JFrame, JComboBox
from java.awt import BorderLayout
import time
class Foo(Runnable):
def run(self):
mainWindow = JFrame('Test', defaultCloseOperation = JFrame.EXIT_ON_CLOSE)
mainWindow.setLayout(BorderLayout())
mainWindow.add(JComboBox(["Foo", "Bar", "Baz"]), BorderLayout.PAGE_START)
mainWindow.visible = True
if __name__ == "__main__":
app = Foo()
SwingUtilities.invokeLater(app)
while True:
time.sleep(5)
在最终实际访问了我一直在远程测试的Linux机器之后,一切正常 因此,这个问题与SSH、XMing以及在Linux机器上进行显示转发的任何设置的组合有关
向那些花时间回答这个无法回答的问题的人道歉 加1表示支持。在Mac OS X 10.5和Ubuntu10.04.3上的工作与预期一样。我应该提到,我的Linux测试是通过SSH完成的,使用的是Xming,仍然在同一台Windows机器上。“我正在努力找出这个多层办公室里的Linux盒子在哪里,这样我就可以坐在那里进行测试了。”安德烈·霍姆普森大叫一声,对代码做了一些编辑,但没有看到那一行。现在试试。好的,我现在就可以编译了。不幸的是,前几周我在安装Win 7 64位时把我的Ubuntu操作系统弄坏了,还没有时间重新安装。Linux上安装的JRE是什么?确保您使用的是Oracle/Sun JRE或OpenJDK 6。避免GCJ。